使用对象c ++创建二维向量

时间:2016-04-27 13:09:17

标签: c++ vector

我正在尝试使用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);
    }
}

3 个答案:

答案 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));