在类之间转换变量

Nej*_*lof 2 c++ class

我有这种类的结构,我不知道,为什么我有错误.由于错误输出,搜索问题也很困难.

error: cannot convert 'A::C*' to 'C*' in assignment: two = this;
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

class B;
class C;

class A{
 class B{
   public:
   B* one
   C* two;
   And some methods....
   ...
 };
 class C : public B{
   public:
   int f;
   C(){
    two = this; //here is error
   }
 };
};
Run Code Online (Sandbox Code Playgroud)

jot*_*tik 9

您的示例声明了5个不同的类(完全限定,按顺序): ::B, ::C; ::A,::A::B并且::A::C,因为在你的代码中

class B;
class C;
Run Code Online (Sandbox Code Playgroud)

声明::B::C在全局命名空间中,您可能不打算这样做.这导致编译器认为CC* two;字段中不合格::A::B是指::C代替::A::C.

而是class A {}像这样在里面声明这些类:

class A{
 class B; // declares ::A::B
 class C; // declares ::A::C
 class B{
   public:
   B* one
   C* two; // ::A::C*
   And some methods....
   ...
 };
 class C : public B{
   public:
   int f;
   C(){
    two = this; // should work now
   }
 };
};
Run Code Online (Sandbox Code Playgroud)

在上面,编译器现在知道C*你的意思是::A::C*因为在搜索匹配类型C时遇到class C;内部范围的声明class A {};.但是,它没有"看到"::A::C下面声明的实际定义.

有关非限定名称查找的详细规则,请参阅C++标准(草案版本)的§3.4.1节.