这可能是一个C ++初学者的错误,但我现在真的很困惑,因为得到这个编译器错误:
error: no matching function for call to 'B::B(A (*)())'
note: candidates are: B::B(A*)
我写了两个看起来简化的类:
//a very simple class A
class A
{
public:
A()
{
//do some stuff in Constructor
}
}
//another class, that stores a pointer to an object of A as a field
class B
{
private:
A* _a;
public:
//simply initialize the field in Constructor
B(A* a) : _a(a) { }
void doMagic()
{
//do something with _a
_a->xyz();
}
}
我在代码中调用的是:
A a();
B b(&a); //here the error appears
我想要的是创建一个对象a并将其指针传递给对象b。这样我就可以访问b的成员了。
它必须只是B b(& a)的召唤;也许你可以很容易地找出我的问题。
答案 0 :(得分:1)
您并未创建A
类型的对象,而A a();
是函数声明,不带参数,返回类型为A
。因此,您尝试将函数指针传递给B
的ctor,这是编译器抱怨的内容。你应该改变
A a();
到
A a;
答案 1 :(得分:0)
A a();
这是一个功能声明。规则是:可以作为函数声明的所有东西都是函数声明。 这可以是构造函数调用或函数声明,因此它永远不会成为构造函数调用。 试试这个:
A a;
答案 2 :(得分:0)
A a();
定义一个名为a
的函数,该函数返回类型为A
的对象。
您正在将该函数传递给B
类型的构造函数。
将a
的初始化更改为此,以便创建类型为a的对象:
A a;