C++:类成员(变量)的前向声明

3

能否前向声明类成员变量?我想要做如下操作(但不起作用):

class myClass;
bool myClass::myvar;

void main()
{
    myClass* aaa;
    ...
    aaa->myvar = false;
}

在这个例子中,myvar是myClass的一个布尔成员。

尝试弄清楚仅凭存在这样的成员变量的信息,在哪里存储 *aaa 的成员变量的新值,以理解为什么你不能这样做。 - molbdnilo
从设计角度来看,修改内部数据会破坏封装性,因此这也不是一个好的方法。 - Jens
2个回答

1
不行。想象一下,如果类在不同的翻译单元中分散开来,那么它会有哪些成员?对象布局又会是什么样子?
这是一个棘手的问题。

0
我建议在这种情况下使用set/get方法。这样,您就不会将内部数据暴露给外部世界。
在myClass的头文件中:
class myClass
{
    public: setMyVar(const bool& value);
    public: inline const bool& getMyVar() const;

    private: bool myVar;
};

在你的实现中:

class myClass;

void main()
{
    myClass* aaa;
    ...
    aaa->setMyVar(false);
}

似乎问题的重点是在不需要包含类头文件的情况下使用类的数据,但在您的情况下,即使按要求进行了前向声明,仍然无法访问setMyVar而不包括类的完整定义。 - crashmstr
啊,很可能我误解了重点。每个翻译单元中的所有数据类型和声明都必须为编译器所知,而前向声明不能替代此过程。因此,在您的特定情况下,必须包含头文件。 - dmi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接