我有这种类的结构,我不知道,为什么我有错误.由于错误输出,搜索问题也很困难.
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)
您的示例声明了5个不同的类(完全限定,按顺序): ::B, ::C; ::A,::A::B并且::A::C,因为在你的代码中
class B;
class C;
Run Code Online (Sandbox Code Playgroud)
声明::B并::C在全局命名空间中,您可能不打算这样做.这导致编译器认为C在C* 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节.
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |