c++ - 有人可以解释一下,为什么我的代码不起作用?
问题描述
我是 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);
}
解决方案
如果您打算使用仅在运行时知道的值来创建矩阵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
推荐阅读
- sql - 如何选择多列同时保持其中一列不同
- c - 为什么即使我没有返回值,我也会得到 sum 作为输出?
- python - 根据 pandas 中的另一个列值突出显示一个列值
- spring-boot - 使用 Maven 项目 (KieScanner) 中的规则将事件处理设置为 STREAM
- java - java - 如何使用命令行工具按类名查找导入完整路径?
- python - 无法卸载 enum34 (Python 3.6, MacOS)
- python - 如何在没有数组名称的python中解析JSON
- ios - 目标 C - 检查 IP 地址是否是网络的一部分
- c# - 如何在 FluentAssertions 中为 Equality 使用特定的比较器函数
- python - 暹罗网络中的成本保持在 0.6932