我在创建对象矢量向量时遇到了麻烦。 目标是获得像棋盘一样的东西,每个领域都是一个 然后可以使用向量访问该对象。
#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 ++的新手,这是我在这里的第一篇文章。
答案 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;
};
t
应该是静态的答案 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})};