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++ 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章