使用对象 C++ 创建二维矢量

create 2-d vector using objects c++

本文关键字:二维 对象 C++ 创建      更新时间:2023-10-16

>我正在尝试使用类 A 中的对象创建 2-D 向量,但出现以下错误。

 error: no matching function for call 'std::vector<A>::push_back(A*)'

我正在使用下面的代码来创建我的向量。我使用了类似的代码来创建布尔值的 2-D 向量,只需在下面的代码中将"A"更改为"bool"。我不知道为什么这不起作用。

不工作代码

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);
    }
}
board[i].push_back(new A(i,j)); // new A(..) returns A *

应该成为

board[i].push_back(A(i,j)); // A(..) return A

你写道:

board[i].push_back(new A(i,j));

new A(i,j)类型为 A*的值(指向 A 的指针)。 相反,您应该推送类型为 A 的值。 这就是你应该写的:

board[i].push_back(A(i,j));

您收到的错误消息说明了您需要了解的所有内容

错误:调用"std::vector::p ush_back(A*)"没有匹配函数

编译器找不到用于将指向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));