在c ++中调用错误时没有匹配函数

时间:2016-05-20 16:55:06

标签: c++

我是c++的新手,我知道有很多类似的问题,但不幸的是我没有帮助我解决这个问题(我认为这是一个概念上的误解)

所以我有constructor

Field::Field(const Position &posG, const Position &posC) {
    //...
}

我正在创建一个Field,如下所示

// Create positions
Position posG, posC;
posG.x = 3;
posG.y = 3;
posC.x = 4;
posC.y = 4;

// Create pointers to positions
const Position *pPosC(&posC);
const Position *pPosG(&posG);

// Create field
Field field (pPosG, pPosC);

位置

struct Position {
    int x;
    int y;
};

然后我得到了这个例外:

main.cpp:27:30: error: no matching function for call to ‘Field::Field(const Position*&, const Position*&)’
     Field Field (pPosG, pPosC);

In file included from main.cpp:2:0:

有任何帮助吗?此致

4 个答案:

答案 0 :(得分:3)

Field(const Position &posG, const Position &posC);
                     ^^^^^                 ^^^^^^

这些是参考。所以当你尝试传递指针时

Field field (pPosG, pPosC);
             ^^^^^   ^^^^
             pointer   pointer

它无法编译。

使构造函数接受引用指针(const Position *&posG)或传递指针的值(*pPosG),或者直接传递值(posG)。

答案 1 :(得分:3)

如果将构造函数定义为

Field(const Position &posG, const Posicion &posC);

您可以使用Position类型的对象作为参数,而不是指向Position的指针。

您可以使用:

Field field(posG, posC);

Field field(*pPosG, *pPosC);

答案 2 :(得分:2)

您的构造函数需要引用,而不是指针。

作为旁注,不清楚为什么使用引用或指针。

答案 3 :(得分:0)

您必须定义constructor,然后使用const Position *pPosC(&posC);表达式。

您必须像这样定义constructor-copy

struct Posicion {
public :
    Position(const Position &pos)         // constructor copy
    {
        // some code here
        x = pos.x;
        y = pos.y;
    }

    int x;
    int y;
};