我无法编译它。我不知道发生了什么事,对我来说似乎不错。我得到的错误:
error C2059: syntax error "{"
error C2143: syntax error: missing ";" before "}"
error C2143: syntax error: missing ";" before "}"
X.h
class X
{
friend symbol;
public:
X();
private:
int tab[4][3];
};
X.cpp
X::X()
{
tab[4][3]={{0,1,0},{1,0,1},{2,-1,0},{3,0,-1}};
}
哪里出了问题?
答案 0 :(得分:4)
您的tab[4][3]={{0,1,0},{1,0,1},{2,-1,0},{3,0,-1}};
有几个问题。
tab[4][3]
尝试引用tab
的一个元素,而不是整个数组。tab
定义为tab[4][3]
,合法索引从tab[0][0]
到tab[3][2]
。答案 1 :(得分:1)
如果您可以使用C ++ 11,则可以使用此语法
X() : tab {{0,1,0},{1,0,1},{2,-1,0},{3,0,-1}} {}
答案 2 :(得分:0)
您尝试做的事情基本上可以使用符合C ++ 11的C ++编译器。不幸的是你使用的是Visual C ++(不确定是哪个版本)但是这种东西在任何VC ++官方版本中都无法使用。如果VC ++ 完全 C ++ 11兼容,那么这将起作用:
private:
int tab[4][3] {{0,1,0},{1,0,1},{2,-1,0},{3,0,-1}};
};
下面的代码恰好适用于符合C ++ 11标准的编译器,但它也适用于从VS2013开始的VC ++。可能更适合您的方法是使用std::array
:
#include <array>
class X {
friend symbol;
public:
X();
private:
// Create int array with 4 columns and 3 rows.
std::array<std::array<int, 3>, 4> tab;
};
X::X()
{
// Now initialize each row
tab[0] = { {0, 1, 0} }; // These assignments will not work on Visual studio C++
tab[1] = { {1, 0, 1} }; // earlier than VS2013
tab[2] = { {2, -1, 0} }; // Note the outter { } is used to denote
tab[3] = { {3, 0, -1} }; // class initialization (std::arrays is a class)
/* This should also work with VS2013 C++ */
tab = { { { 0, 1, 0 },
{ 1, 0, 1 },
{ 2, -1, 0 },
{ 3, 0, -1 } } };
}
我通常使用vector
代替像int tab[4][3];
这样的数组。这可以被视为向量的向量。
#include <vector>
class X {
friend symbol;
public:
X();
private:
std::vector < std::vector < int >>tab;
};
X::X()
{
// Resize the vectors so it is fixed at 4x3. Vectors by default can
// have varying lengths.
tab.resize(4);
for (int i = 0; i < 4; ++i)
tab[i].resize(3);
// Now initialize each row (vector)
tab[0] = { {0, 1, 0} };
tab[1] = { {1, 0, 1} };
tab[2] = { {2, -1, 0} };
tab[3] = { {3, 0, -1} };
}