1

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

在我的头文件中,我有:

class MyClass {
public:
  bool test;

  struct MyStruct;
};

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

在cpp中我想做的是:

MyClass::MyStruct {
  test=true;
};

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

4

3 回答 3

2

这个:

MyClass::MyStruct {
  test=true;
};

根本不是有效的 C++ 代码。也许你的意思是:

MyClass::Class() {
  test=true;
}

这将使默认构造函数MyClass设置testtrue. 但是您的问题使您似乎想设置MyClass::testfrom的值MyClass::MyStruct。这实际上是不可能的,因为嵌套类(或结构,在您的情况下)不“继承”或“包含”或与它的封闭类(或结构)几乎没有任何特殊关系。

另一种可能性是:

class MyClass {
public:
  static bool test;

  struct MyStruct;
};

MyClass::MyStruct::MyStruct() {
  test=true;
}

这将使嵌套结构的默认构造函数在封闭类中设置一个变量,但是该变量需要是静态的,这意味着整个程序中只有一个,而不是类或结构的每个实例的单独值。

于 2013-06-21T12:16:39.310 回答
0

您可以在类定义中将结构声明为 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.

于 2013-06-21T12:15:42.263 回答
0

在我看来,如果 MyStruct 正在执行代码,它应该是一个类。如果是这样,您要么将 MyClass 的实例传递给它(例如this,如果从 MyClass 调用),要么将其传递给它需要的成员的引用(例如this->test)...

于 2013-06-21T12:18:22.557 回答