好的,所以我尝试了几种方法来处理这个问题,但我似乎无法解决它。
在我的头文件中,我有:
class MyClass {
public:
bool test;
struct MyStruct;
};
我也有一个构造函数和所有这些,但这不是重要/不会导致错误
在cpp中我想做的是:
MyClass::MyStruct {
test=true;
};
问题在于该结构无法访问测试变量。如何将当前实例的变量传递给结构或其他方式以允许结构访问变量。
好的,所以我尝试了几种方法来处理这个问题,但我似乎无法解决它。
在我的头文件中,我有:
class MyClass {
public:
bool test;
struct MyStruct;
};
我也有一个构造函数和所有这些,但这不是重要/不会导致错误
在cpp中我想做的是:
MyClass::MyStruct {
test=true;
};
问题在于该结构无法访问测试变量。如何将当前实例的变量传递给结构或其他方式以允许结构访问变量。
这个:
MyClass::MyStruct {
test=true;
};
根本不是有效的 C++ 代码。也许你的意思是:
MyClass::Class() {
test=true;
}
这将使默认构造函数MyClass
设置test
为true
. 但是您的问题使您似乎想设置MyClass::test
from的值MyClass::MyStruct
。这实际上是不可能的,因为嵌套类(或结构,在您的情况下)不“继承”或“包含”或与它的封闭类(或结构)几乎没有任何特殊关系。
另一种可能性是:
class MyClass {
public:
static bool test;
struct MyStruct;
};
MyClass::MyStruct::MyStruct() {
test=true;
}
这将使嵌套结构的默认构造函数在封闭类中设置一个变量,但是该变量需要是静态的,这意味着整个程序中只有一个,而不是类或结构的每个实例的单独值。
您可以在类定义中将结构声明为 a friend
。
class MyClass {
public:
bool test;
friend struct MyStruct;
};
编辑:
class MyClass {
friend class MyStruct(MyClass *myClass) : myClass(myClass) {
private:
MyClass *myClass;
}
MyStruct *myStruct;
bool test;
public:
MyClass() {
myStruct = new MyStruct(this);
}
}
注意:这是未经测试的,只是写在我的浏览器中。我知道它缺少析构函数和东西。
由于您将父指针传递给成员类,因此成员类可以访问父类的私有成员,因为它被声明为friend
.
在我看来,如果 MyStruct 正在执行代码,它应该是一个类。如果是这样,您要么将 MyClass 的实例传递给它(例如this
,如果从 MyClass 调用),要么将其传递给它需要的成员的引用(例如this->test
)...