我是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:
有任何帮助吗?此致
答案 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;
};