我有以下代码:
template <typename M>
struct Matrix
{
Matrix(int size);//(int x = defaultRows, int y = defaultCols);
~Matrix();
int rowSize;
int colSize;
char alpha[4];
int getSize() const;
void displayAll();
M getElement(int x, int y);
M** aMatrix;
};
template <typename M>
Matrix<M>::Matrix(int size)
{
alpha = {'a', 'b', 'c', 'd'};
rowSize = size;
colSize = size + 1;
aMatrix = new M*[rowSize];
srand(time(NULL)); //set the random seed
for(int r = 0; r < size; r++)
{
aMatrix[r] = new M[colSize];
for(int c = 0; c < colSize; c++)
{
int randomNum = rand() % 19 + (-9);
aMatrix[r][c] = randomNum;
}
}
}
我不知道为什么,但是当我尝试编写程序时,我一直都会遇到错误。它与我的“alpha”字符数组有关(当我评论它时,它工作正常)。
我根本没有看到它的错误......
错误是: 错误3错误C2143:语法错误:缺少';'在'}'之前
错误2错误C2143:语法错误:缺少';'在'{'
之前错误1错误C2059:语法错误:'{'
不要以为我错过了什么吗?
答案 0 :(得分:1)
你不能用C ++做这件事(反正一段时间不行):
alpha = {'a', 'b', 'c', 'd'};
它看起来像一个初始化器,但事实并非如此。尝试:
alpha[0] = 'a';
alpha[1] = 'b';
alpha[2] = 'c';
alpha[3] = 'd';
并不是说它会对你有所帮助,但C99(以及一些C ++编译器,作为扩展)支持这一点:
alpha = (char[]){'a', 'b', 'c', 'd'};
答案 1 :(得分:1)
您不能以这种方式设置数组。在C ++ 11中修复了C ++的一个不幸的问题,但是现在你必须做类似的事情:
alpha[0] = 'a';
alpha[1] = 'b';
...
或者你可以做
Matrix<M>::Matrix(int size)
{
char alpha_init[4] = {'a','b','c','d'};
std::copy(alpha_init,alpha_init+4,alpha);
在C ++ 11中,您将能够:
Matrix<M>::Matrix(int size)
: alpha{'a','b','c','d'}
{
甚至更简单(正如迈克尔普莱斯建议的那样):
struct Matrix {
/* ... */
char alpha[4] = {'a','b','c','d'};
/* ... */
};
答案 2 :(得分:0)
alpha = {'a', 'b', 'c', 'd'};
数组只能在其定义中以这种方式初始化。当数组是类的成员时,不能使用这种形式的初始化。你必须按常规方式做,一次一个元素:
alpha[0] = 'a';
alpha[1] = 'b';
alpha[2] = 'c';
alpha[3] = 'd';
答案 3 :(得分:0)
正如其他人已经指出的那样,这种语法只能用于初始化数组,当你进入构造函数体时,数组已经初始化了。 C ++ 11有一个很好的语法,可以让你初始化初始化列表中的数组,但是你的C ++编译器可能已经或者可能没有了。
其他人的建议有效,但我不建议他们这样做。它们很冗长,看起来有点丑陋,它们不适用于任意大的数组,因为在某些时候整个事情变得笨拙。所以这就是我要做的......
static const char alpha_init[] = "abcd";
::std::copy(alpha_init, alpha_init+4, alpha);