初始化对象向量的向量

时间:2018-03-15 11:04:57

标签: c++ vector initialization

我在创建对象矢量向量时遇到了麻烦。 目标是获得像棋盘一样的东西,每个领域都是一个  然后可以使用向量访问该对象。

#include<vector>
using namespace std;

class raster;

class field{
  int x, y;
public:
  field(int x, int y) : x(x), y(y) {};
  friend class raster;
};

class raster{
  const size_t s=12;
  vector<vector<field> > game_row(s,vector<field>game_column(s,0)); //here I get the second error
public:
  friend class field;
};

所以我希望向量向量成为不同类的成员,但每次使用g ++进行编译时都会说 错误:'s'不是类型
错误:在'('token

之前'预期','或'...'

很抱歉,如果我混淆了帖子的格式,
我是c ++的新手,这是我在这里的第一篇文章。

2 个答案:

答案 0 :(得分:0)

应该是这样的:

class raster{
  const static size_t s=12;
  vector<vector<field> > game_row{s,vector<field>(s,field(0,0))}; //here I get the second error
public:
  friend class field;
};
  1. t应该是静态的
  2. 使用initailize表达式,以便编译器不会将表达式识别为函数声明表达式

答案 1 :(得分:0)

这一行代码中存在许多问题:

vector<vector<field> > game_row(s,vector<field>game_column(s,0));

首先 - 什么是game_column?看起来您正在尝试将向量元素声明为命名变量;这不是它的工作原理。我认为你应该完全删除game_column

然后,您遇到的问题是game_row的声明看起来像是函数声明,而不是变量声明。 (令人困惑的是,C ++允许您使用的语法来声明变量,但不会立即在类声明中 - 仅在其他上下文中,例如内部函数!)。

您可以使用其他语法,例如:

vector<vector<field>> game_row {s,vector<field>(s,0)}; // C++11 +

或者对于C ++ 98,您需要添加一个显式构造函数并初始化初始化列表中的数据成员:

    size_t s;
    vector<vector<field> > game_row;
public:
    raster() : s(12), game_row(s, vector<field>(s,0)) { }

(从这里我假设你正在使用C ++ 11)。

然而,这种变化仍会产生错误;由于您指定其构造函数需要一对field值,因此无法仅使用单个int初始化int对象。因此,您需要:

vector<vector<field>> game_row {s,vector<field>(s,{0,0})};