【问题标题】:Char array is not working in c++Char 数组在 C++ 中不起作用
【发布时间】:2011-10-26 17:43:50
【问题描述】:

我有以下代码:

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

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

【问题讨论】:

  • alpha = {'a', 'b', 'c', 'd'}; - 在你已经在别处声明它之后,你不能像这样初始化一个数组。您必须在一行中完成所有操作。

标签: c++ arrays char


【解决方案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'};

【讨论】:

  • 该死...这意味着我最终将有 26 行仅用于字母...无论如何,谢谢您的信息:D
【解决方案2】:

你不能那样设置数组。这是 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'};
    /* ... */
};

【讨论】:

  • +1 指出这已在 C++11 中解决。您还可以使用类内声明初始化而不是构造函数初始化列表。
【解决方案3】:
alpha = {'a', 'b', 'c', 'd'};

数组只能在其定义中以这种方式初始化。当数组是类的成员时,不能使用这种形式的初始化。您必须以常规方式进行,一次一个元素:

alpha[0] =  'a';
alpha[1] =  'b';
alpha[2] =  'c';
alpha[3] =  'd';

【讨论】:

    【解决方案4】:

    正如其他人指出的那样,这种语法仅适用于初始化数组,并且当您进入构造函数主体时,数组已经初始化。 C++11 有一个很好的语法,可以让你在初始化列表中初始化数组,但它可能对你的 C++ 编译器可用,也可能不可用。

    其他人的建议有效,但我不会建议他们。它们很冗长,看起来有点难看,而且它们不适用于任意大的数组,因为在某些时候整个事情变得笨拙。所以这就是我要做的......

       static const char alpha_init[] = "abcd";
       ::std::copy(alpha_init, alpha_init+4, alpha);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多