3

我有以下三个类定义:

class String
{
    public:
        String() {}
        String(const char *) {}
};

class ClassA
{
    public:
        ClassA(const String &) {}
};

class ClassB
{
    public:
        ClassB(const ClassA &, const String & = String()) {}
        void method() {}
};

现在假设我想创建一个实例ClassB

String name("test");
ClassA item(ClassB(name));

这不起作用:

错误:在“item”中请求成员“method”,它是非类的
  输入“A类()(B类)”

这个错误是什么意思?ClassA ()(ClassB)编译器一直引用的这种奇怪的类型是什么?

4

1 回答 1

8

这被称为最棘手的解析问题

ClassA item(ClassB(name));

应该是:

ClassB b(name);
ClassA item(b);

或者:

ClassA item( (ClassB(name)) );

另请参阅:最令人烦恼的解析:为什么不 A a(()); 工作?

于 2013-10-07T23:56:55.940 回答