我正在尝试使用A类中的对象创建一个二维矢量,但是我收到以下错误。
error: no matching function for call 'std::vector<A>::push_back(A*)'
我正在使用下面的代码来创建我的矢量。我使用类似的代码来创建一个布尔的二维向量,只需更改&#39; A&#39;到了布尔&#39;在下面的代码中。我不知道为什么这不起作用。
没有工作代码
std::vector<std::vector<A> > board;
for(int i=0;i<rows;i++)
{
board.push_back(vector<A>()); //insert rows
}
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
board[i].push_back(new A(i,j)); //insert cols and value
}
}
工作代码
vector<vector<bool> > board;
for(int i=0;i<rows;i++)
{
board.push_back(vector<bool>());
}
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
board[i].push_back(false);
}
}
答案 0 :(得分:3)
board[i].push_back(new A(i,j)); // new A(..) returns A *
应该成为
board[i].push_back(A(i,j)); // A(..) return A
答案 1 :(得分:2)
你写道:
board[i].push_back(new A(i,j));
new A(i,j)
类型为A*
的值(指向A
的指针)。您应该改为输入A
类型的值。多数民众赞成你应该写的:
board[i].push_back(A(i,j));
答案 2 :(得分:2)
您收到的错误消息表示您需要知道的所有内容
错误:没有匹配的函数用于调用&#39; std :: vector :: push_back(A *)&#39;
编译器找不到用于将A
对象的指针插入std::vector
的函数调用。
使用以下行:
board[i].push_back(new A(i,j));
您正在尝试将指针推送到std::vector
。
您可以将数据结构更改为
std::vector<std::vector<A*>> board;
(请记住以后免费内存并更改初始化)
或者您将方法调用更改为
board[i].push_back(A(i,j));