为什么我不能访问这个班级的成员?

Nat*_*man 3 c++ syntax initialization class variable-initialization

我有以下三个类定义:

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

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

class ClassB
{
    public:
        ClassB(const ClassA &, const String & = String()) {}
        void method() {}
};
Run Code Online (Sandbox Code Playgroud)

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

String name("test");
ClassA item(ClassB(name));
Run Code Online (Sandbox Code Playgroud)

这不起作用:

error: request for member 'method' in 'item', which is of non-class
  type 'ClassA ()(ClassB)'

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

Lih*_*ihO 8

这被称为最令人烦恼的解析问题.

ClassA item(ClassB(name));
Run Code Online (Sandbox Code Playgroud)

应该是:

ClassB b(name);
ClassA item(b);
Run Code Online (Sandbox Code Playgroud)

要么:

ClassA item( (ClassB(name)) );
Run Code Online (Sandbox Code Playgroud)

另外看看:最烦恼的解析:为什么不是A(()); 工作?