Char数组在c ++中不起作用

时间:2011-10-26 17:43:51

标签: c++ arrays char

我有以下代码:

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:语法错误:'{'

不要以为我错过了什么吗?

4 个答案:

答案 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);