在 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
这是我的代码
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