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

Posted

技术标签:

【中文标题】Char 数组在 C++ 中不起作用【英文标题】:Char array is not working in 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'; - 在你已经在别处声明它之后,你不能像这样初始化一个数组。您必须在一行中完成所有操作。 【参考方案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);

【讨论】:

以上是关于Char 数组在 C++ 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Memset 在外部函数中不起作用

为啥 memset 功能不起作用? [复制]

为啥模板参数推导在 C++ 中不起作用?

相对路径在 Xcode C++ 中不起作用

为啥使用命名空间在我的 C++ 项目中不起作用?

为啥 C++ CLI 索引属性在 C# 中不起作用?