在 C++ 中没有针对调用错误的匹配函数

occur no matching function for call to error in c++

本文关键字:错误 函数 调用 C++      更新时间:2023-10-16

我是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:

有什么帮助吗?问候

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

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

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

它无法编译。

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

当您将构造函数定义为

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

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

您可以使用:

Field field(posG, posC);

Field field(*pPosG, *pPosC);

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

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

你必须定义一个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;
};