错误:没有调用“Square::Square(Square Color &,Location*)”的匹配函数
Posted
技术标签:
【中文标题】错误:没有调用“Square::Square(Square Color &,Location*)”的匹配函数【英文标题】:error:no matching fucntion for call to 'Square::Square(SquareColor&,Location*)' 【发布时间】:2020-12-29 11:30:31 【问题描述】:我正在尝试用 C++ 制作一个国际象棋游戏,但我遇到了一个无法解决的错误
错误在哪里:
for(auto file : all_E)
Square newSquare= new Square(currentColor, new Location(file,i));
boardSquares[i][column]=newSquare;
这些是Square
和Location
类
class Square
SquareColor squareColor;
Location location;
bool isOcuppied;
public:
Square();
Square(SquareColor sqCol, Location loc );
void reset();
bool isOccupied();
void setOccupied(bool occupied);
SquareColor getSqCol();
Location getLoc();
char* toString();
;
class Location
File file;
int rankk;
public:
Location();
Location(File _file, int _rankk);
File getFile();
int getRank();
;
我阅读了有关此错误的信息,并尝试添加默认构造函数Square()
和Location()
,但没有成功。
【问题讨论】:
您声明的构造函数采用 value 的第二个参数(即Location
),而不是指向与您的调用代码试图调用相同的指针。
您应该在问题中发布minimal reproducible example 和错误消息。但是,很明显,您尝试传递 Location*
(指向 Location
的指针)而函数采用 Location
。
少用 new
有助于 99.99% 的情况。
【参考方案1】:
您正在构造一个指针 (Location*
),而不是一个对象 (Location
),这就是构造函数不匹配的原因。
删除new
:
Square newSquare = Square(currentColor, Location(file,i));
【讨论】:
以上是关于错误:没有调用“Square::Square(Square Color &,Location*)”的匹配函数的主要内容,如果未能解决你的问题,请参考以下文章
错误 TS2349:无法调用其类型缺少调用签名的表达式。类型 ' ; ' 没有兼容的调用签名
C语言调用函数发生段错误,发生段错误的函数是没有执行就段错误了