在类之间转换变量

时间:2016-04-24 20:12:59

标签: c++ class

我有这种课程结构,我不知道,为什么我得到错误。由于错误输出,搜索问题非常困难。

error: cannot convert 'A::C*' to 'C*' in assignment: two = this;

如何解决此错误?

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
   }
 };
};

1 个答案:

答案 0 :(得分:9)

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

class B;
class C;

在全局命名空间中声明::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
   }
 };
};

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

非限定名称查找的详细规则可以在C ++标准(draft version)的§3.4.1节中找到。

相关问题