好吧,所以我尝试了几种方法来处理这个问题,但我似乎无法修复它。
在我的头文件中,我有:
class MyClass {
public:
bool test;
struct MyStruct;
};
我也有一个构造函数和所有这些,但这不是重要的/不会导致错误
在cpp中,我想做的是:
MyClass::MyStruct {
test=true;
};
问题在于,struct无法访问测试变量。如何将当前实例的变量传递给结构或其他方式以允许结构访问变量。
答案 0 :(得分:2)
此:
MyClass::MyStruct {
test=true;
};
完全不是有效的C ++代码。也许你的意思是:
MyClass::Class() {
test=true;
}
哪个会使MyClass
的默认构造函数将test
设置为true
。但是您的问题似乎要从MyClass::test
设置MyClass::MyStruct
的值。这实际上是不可能的,因为嵌套类(或者你的结构中的struct)不会“继承”或“包含”,或者与它的封闭类(或结构)几乎没有任何特殊关系。
另一种可能性是:
class MyClass {
public:
static bool test;
struct MyStruct;
};
MyClass::MyStruct::MyStruct() {
test=true;
}
这将构成嵌套结构的默认构造函数,它在封闭类中设置一个变量,但该变量需要是静态的,这意味着整个程序中只有一个,而不是每个类的实例单独的值或结构
答案 1 :(得分:0)
您可以在类定义中将结构声明为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
。
答案 2 :(得分:0)
对我来说,如果MyStruct正在执行代码,它应该是一个类。如果是这样,你要么传递MyClass的一个实例(例如this
,如果从MyClass调用),或者传递给它所需成员的引用(例如this->test
)......