在 C++ class 构造函数中传递对象实例(无法编译)

Passing instances of objects in C++ class constructors (could not compile)

这是我的代码

class B {
public:
    void bar() {std::cout<<"~";}
};

class A {
public:
    A() {b=B();};
    A(B arg_b): b(arg_b) {};
    void foo() {b.bar();};
private:
    B b;
};


int main() {
    A a;
    a.foo();  // works fine

    A aa(B());
    aa.foo();  // could not compile, but if I comment out this line only, it can compile.
}

我收到这条错误消息

error: request for member ‘foo’ in ‘aa’, which is of non-class type ‘A(B (*)())’ aa.foo();

我是c++的初学者,有人能解释一下为什么这段代码无法编译吗?通过传入实例初始化 class 成员的正确方法是什么?

A aa(B()); 是一个函数声明。所以你不能写 aa.foo() 因为你不能在函数上使用 .

规则(大致)是,如果代码可以被解析为函数声明或对象定义,则它被解析为函数声明。

相反,您可以使用 A aa{ B() };,它不能是函数声明。

Also see this thread