C++ 字符数组在c+中不工作+;
我有以下代码:C++ 字符数组在c+中不工作+;,c++,arrays,char,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>
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;
}
}
}
模板
结构矩阵
{
矩阵(int size);/(int x=defaultRows,int y=defaultCols);
~Matrix();
整数行大小;
int colSize;
char-alpha[4];
int getSize()常量;
void displayAll();
M getElement(intx,inty);
M**aMatrix;
};
模板
矩阵::矩阵(整数大小)
{
alpha={'a','b','c','d'};
rowSize=大小;
colSize=size+1;
aMatrix=新的M*[行大小];
srand(time(NULL));//设置随机种子
对于(int r=0;r
我不知道为什么,但当我试图编译程序时,我总是出错。这与我的“alpha”字符数组有关(当我对它进行注释时,它可以正常工作)
我看不出有什么问题
错误是:
错误3错误C2143:语法错误:缺少“;”在“}”之前
错误2错误C2143:语法错误:缺少“;”在“{”之前
错误1错误C2059:语法错误:“{”
不要以为我错过了什么?我??/P> < P>你不能在C++中这样做(无论如何都不会有时间):< /P>
它看起来像初始值设定项,但不是。请尝试:
alpha[0] = 'a';
alpha[1] = 'b';
alpha[2] = 'c';
alpha[3] = 'd';
编辑
<>这并不会对你有很大帮助,但是C99(和一些C++编译器一样,作为扩展)支持:
alpha = (char[]){'a', 'b', 'c', 'd'};
数组只能在其定义内以这种方式初始化。当数组是类的成员时,不能使用这种形式的初始化。必须以常规方式进行初始化,每次一个元素:
alpha[0] = 'a';
alpha[1] = 'b';
alpha[2] = 'c';
alpha[3] = 'd';
<>你不能用这样的方式设置数组。C++中的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有一个很好的语法,允许你在初始化列表中初始化数组,但是对于C++编译器可能还是不可用。 另一个的建议行得通,但我不会建议他们。它们太冗长了,大部分看起来有点难看,而且它们不会与任意大的数组一起工作,因为在某个点上整个事情变得很难处理。所以我要做的是
static const char alpha_init[] = "abcd";
::std::copy(alpha_init, alpha_init+4, alpha);
alpha={'a','b','c','d'}
-在已经在其他地方声明了数组之后,您无法初始化这样的数组。您必须在一行中完成所有操作。该死…这意味着我将只为字母表使用26行…无论如何,感谢您提供的信息:D+1指出这在C++11中得到了解决。您还可以使用类内声明初始化ins构造函数初始值设定项列表的tead。
Matrix<M>::Matrix(int size)
{
char alpha_init[4] = {'a','b','c','d'};
std::copy(alpha_init,alpha_init+4,alpha);
Matrix<M>::Matrix(int size)
: alpha{'a','b','c','d'}
{
struct Matrix {
/* ... */
char alpha[4] = {'a','b','c','d'};
/* ... */
};
static const char alpha_init[] = "abcd";
::std::copy(alpha_init, alpha_init+4, alpha);