2012-12-29 55 views
3

我试图使用操作符投射到B *但它不起作用。为什么?谢谢。为什么我不能投向B *?

struct B; 

struct A { 
    A() = default; 

    operator (B *)() { 
     return new B(); 
    } 
}; 

struct B { B() = default; }; 

int main() { 

    A a; 

    B *b = a; 

} 

我得到的错误:cannot convert 'A' to 'B*' in initialization

+0

你究竟在用'operator(B *)()'来做什么?我通常使用'operator B *()',你的语句甚至不会在我的工具链上编译。您显示的错误是我的输出日志中的* last *错误与您的代码;而不是第一个(在你的运算符decl行中,“C++需要所有声明的类型说明符” – WhozCraig

+0

这可能是由于B的定义不完整。你不能创建一个'new' B ...只是猜测。 – StoryTeller

+2

你用什么编译器不会抱怨你的_real_错误? –

回答

8

有几件事情你的代码错误。首先,围绕B*括号是错误的,只是做:

operator B*() {...} 

,它可能应该是一个const成员函数。

此外,您正试图在B定义之前创建类型B的新实例。您不能使用不完整类型,只需在A之前定义B即可。

删除这些错误后,您的代码将按预期工作。

+0

那么为什么这个编译时使用括号并在稍后给出错误?编译器将“(B *)”解释为什么? – templatetypedef

+0

@templatetypedef:没有线索,它的语法错误,我不知道同样的问题,并询问OP使用什么编译器... –

相关问题