在名为Castle的类中,我有以下两个函数:
vector<Location> Castle::getMoves(Location*** squares, Location* loc){
int row = loc->getRow();
int col = loc->getCol();
vector<Location> moves;
//problem is here!
getVerticalMoves(squares, &moves, row, col);
return moves;
}
void Castle::getVerticalMoves(Location*** squares, vector<Location*> * moves, int row, int col){
//need to do something here, but can't call the function!
}
当我尝试编译时,我收到一个如下错误:
model/src/Castle.cpp: In member function ‘std::vector<Location> Castle::getMoves(Location***, Location*)’:
model/src/Castle.cpp:26:44: error: no matching function for call to ‘Castle::getVerticalMoves(Location***&, std::vector<Location>*, int&, int&)’
model/inc/Castle.h:38:8: note: candidate is: void Castle::getVerticalMoves(Location***, std::vector<Location*>*, int, int)
make: *** [model/obj/Castle.o] Error 1
我不明白为什么会出现这个错误。为什么说我传递了它?
答案 0 :(得分:1)
问题是,您的Castle::getVerticalMoves
方法需要vector<Location*>*
作为第二个参数,而您调用它时,您传递的是vector<Location>*
即。您正在尝试将Location的向量发送到期望指向Location的指针向量的方法。
答案 1 :(得分:1)
你想要一个Location
s的向量吗?或者你想要一个指向Location
s指针的向量?你需要选择一个并坚持下去。
它显示引用的原因是因为如果它只显示了值,那表明你不能调用一个带引用的函数,因为引用可以出现在等号的左边,而值不能。您传递给函数的内容可以出现在等号的左侧,因此不要使用&amp;会使错误信息的信息量减少。 (建议你的错误可能是传递一个需要可修改引用的值。)
考虑:
int f1(int &j) { j++; return 3; }
int f2(int j) { return j+1; }
int q;
f1(3); // not legal, we are passing an 'int' value and need an 'int' reference
f2(3); // legal, passing an 'int' value function needs an 'int' value
f1(q); // legal, we are passing an 'int&', function need an 'int&'
f2(q); // legal, reference can be demoted to value
所以当你传递一个左值(可以出现在等号左侧的东西)时,你真的在用一个引用来调用函数 - 比一个值更强大的东西。
答案 2 :(得分:0)
问题是你将std :: vector *传递给std :: vector *。与您的数据类型保持一致。如果您打算将指针传递给指针向量,则传递该指针。