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

时间:2013-10-07 23:55:12

标签: c++ class syntax initialization 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() {}
};

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

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

这不起作用:

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

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

1 个答案:

答案 0 :(得分:8)

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

ClassA item(ClassB(name));

应该是:

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

或:

ClassA item( (ClassB(name)) );

另请参阅:Most vexing parse: why doesn't A a(()); work?