从声明的Struct访问类数据

时间:2013-06-21 12:09:13

标签: c++

好吧,所以我尝试了几种方法来处理这个问题,但我似乎无法修复它。

在我的头文件中,我有:

class MyClass {
public:
  bool test;

  struct MyStruct;
};

我也有一个构造函数和所有这些,但这不是重要的/不会导致错误

在cpp中,我想做的是:

MyClass::MyStruct {
  test=true;
};

问题在于,struct无法访问测试变量。如何将当前实例的变量传递给结构或其他方式以允许结构访问变量。

3 个答案:

答案 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)......