将指针传递给构造函数时,调用错误没有匹配函数

时间:2015-08-26 11:39:58

标签: c++ pointers

这可能是一个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)的召唤;也许你可以很容易地找出我的问题。

3 个答案:

答案 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;