【发布时间】:2014-06-17 10:44:06
【问题描述】:
我想使用构造函数中的初始化列表来初始化二维数组 m_field。 就像在这个线程 Creating 2-dimensional vector in class C++ 中一样,但我收到下面列出的错误。
BoardData.h
#ifndef BOARDDATA_H
#define BOARDDATA_H
#include <vector>
class BoardData
{
public:
/** Default constructor */
BoardData(int rows, int cols);
/** Default destructor */
virtual ~BoardData();
protected:
private:
std::vector< std:vector<int> > m_field;
};
#endif // BOARDDATA_H
BoardData.cpp
#include "BoardData.h"
BoardData::BoardData(int rows, int cols) :
m_field(rows, std::vector<int>(cols,0))
{
//ctor
}
BoardData::~BoardData()
{
//dtor
}
编译器输出:(gcc 版本 4.6.3)
BoardData.h|18|error: template argument 1 is invalid|
BoardData.h|18|error: template argument 2 is invalid|
BoardData.cpp||In constructor ‘BoardData::BoardData(int, int)’:|
BoardData.cpp|4|error: expression list treated as compound expression in mem-initializer [-fpermissive]|
BoardData.cpp|4|warning: left operand of comma operator has no effect [-Wunused-value]|
BoardData.cpp|4|error: cannot convert ‘std::vector<int>’ to ‘int’ in initialization|
||=== Build finished: 4 errors, 1 warnings ===|
【问题讨论】:
-
提示:是Coordinate,不是Coordination,缩写coord,coords复数.
-
另外
m_row在这里完全是多余的。回到书上! (因为那个SO问题也是初学者写的。不懂的代码不要抄)。 -
@BartekBanachewicz 将 Q 编辑到我之前没有 m_row 的迭代中。
-
没有所谓的“默认析构函数”。它只是一个析构函数,你不用评论来解释它。
-
您在 m_field 的声明中缺少双列
标签: c++ vector compilation initialization