我是C ++的新手,我必须解决大学的任务,我必须制作一个结构矩阵并用随机整数填充它。我用“!”标记了这一行。出现错误的地方。 它是错误C2131(Visual C ++编译器)。它说“表达没有评估为常数”。
struct Matrix{
int rows;
int columns;
Matrix(int r, int c){
rows = r, columns = c;
}
int produceMatrix(){
int matrix[rows][columns]; "!"
for(int i = 0; i != rows; i++){
for(int j = 0; j != columns; j++){
matrix[i][j] = rand() %10 +1;
}
}
return 0;
}
int showMatrix(){
for(int i = 0; i != rows; i++){
for(int j = 0; j != columns; j++){
cout << matrix[i][j]<< endl;
}
}
}
};
int main()
{
srand(time(0));
Matrix a(3, 4);
}
答案 0 :(得分:2)
如果您计划创建仅在运行时已知的rows
和columns
值的矩阵,最好使用std::vector<std::vector<int>>
来保存数据,就像您使用的静态数组一样需要在编译时知道它的大小。但是,如果在编译时知道所有大小,并且您只是想要创建不同矩阵大小的灵活性,则可以使用模板,例如:
#include <iostream>
#include <ctime>
template <int ROWS, int COLUMNS>
struct Matrix
{
int rows = ROWS;
int columns = COLUMNS;
int matrix[ROWS][COLUMNS] = {};
void produceMatrix()
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
matrix[i][j] = rand() % 10 + 1;
}
}
}
void showMatrix()
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
std::cout << matrix[i][j] << "\t";
}
std::cout << std::endl;
}
}
};
int main()
{
srand(time(0));
Matrix<3,4> a;
a.produceMatrix();
a.showMatrix();
}
4 10 5 5
3 8 3 6
2 4 9 10
答案 1 :(得分:1)
有一点是你不能用这种方式制作变长数组。
另一件事是,如果你在一个函数中创建一个变量(就像你在int matrix
中使用produceMatrix()
一样),那么它在另一个函数中是不可见的。
因此,包含矩阵元素的数组应该在你的结构中声明,你已声明rows
和columns
。
要存储矩阵的元素,您可以使用长度等于rows*columns
的一维数组。
现在,您需要某种动态数组才能使其具有编译时未知的长度。
一种解决方案是使用指针并在构造函数中使用new
运算符定义数组。但是,如果使用new
,则必须在某个时刻使用delete
来释放内存,这意味着需要析构函数。另一个问题是复制你的矩阵。
另一个更简单的解决方案是使用std::vector
,一个由c ++标准库提供的容器。以下是std::vector
的处理方法(您需要在文件中添加#include<vector>
):
struct Matrix{
int rows;
int columns;
vector<int> matrix;
Matrix(int r, int c){
rows = r, columns = c;
matrix = vector<int>(c*r);
}
int produceMatrix(){
for(int i = 0; i < matrix.size(); i++){
matrix[i] = rand() %10 +1;
}
return 0;
}
int showMatrix(){
for(int i = 1; i <= matrix.size(); i++){
cout << matrix[i-1];
if(i%columns == 0) cout << endl;
else cout << " ";
}
return 0;
}
};
答案 2 :(得分:0)
正如很多人评论的那样,请通过一本好的C ++书来了解数组,类,结构等。至于你的代码,以下内容可能会产生我想你想要的东西:
#include <iostream>
#include <vector>
struct Matrix
{
int rows;
int columns;
std::vector<std::vector<int>> matrix;
Matrix(int r, int c): rows(r), columns(c)
{
matrix.resize(r);
for(int i = 0; i < r; i++)
matrix[i].resize(c);
}
int produceMatrix()
{
for(int i = 0; i != rows; i++)
for(int j = 0; j != columns; j++)
matrix[i][j] = rand() %10 +1;
return 0;
}
int showMatrix()
{
for(int i = 0; i != rows; i++)
{
for(int j = 0; j != columns; j++)
std::cout << matrix[i][j]<<" ";
}
std::cout<<'\n';
}
};
int main()
{
srand(time(0));
Matrix a(3, 4);
a.produceMatrix();
a.showMatrix();
}