C++ cout中的未知编译器错误<&书信电报;理论上它是有效的 #包括 使用名称空间std; 无效矩阵(整数n){ cout
主要问题是您在C++ cout中的未知编译器错误<&书信电报;理论上它是有效的 #包括 使用名称空间std; 无效矩阵(整数n){ cout,c++,operators,void,C++,Operators,Void,主要问题是您在for循环中声明min,它将在循环退出时超出范围 奇怪的错误消息可能是因为函数。这是一个很好的案例,说明了为什么不使用名称空间std; 乍一看,代码中还有其他问题: i、min和j在main()中未使用 n在未初始化的情况下使用,这是进一步的。如果您需要可变长度数组,您可以使用类似的方法 如果(min=0>D[i-1][j-1])很奇怪,那真的是你需要的吗 将来您应该使用编译器警告。这里有一个基本问题:main中的调用matrice(n)使用了n的未初始化值,因此如果您的编译器
for
循环中声明min
,它将在循环退出时超出范围
奇怪的错误消息可能是因为函数。这是一个很好的案例,说明了为什么不使用名称空间std;
乍一看,代码中还有其他问题:
、i
和min
在j
中未使用main()
在未初始化的情况下使用,这是进一步的。如果您需要可变长度数组,您可以使用类似的方法n
很奇怪,那真的是你需要的吗如果(min=0>D[i-1][j-1])
将来您应该使用编译器警告。这里有一个基本问题:
main
中的调用matrice(n)
使用了n
的未初始化值,因此如果您的编译器支持int D[n][n]
语法您不知道数组实际有多大。正式地说,行为是未定义的。非正式地说,您有50/50的可能会得到一个负数,这对于数组大小来说没有意义。min
仅在for循环范围内可见,因为您在循环内声明了它
声明如下:
int min=D[0][0];
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (min > D[i - 1][j - 1])
{
D[i - 1][j - 1] = min;
}
}
}
cout << " Elementi me i vogel eshte : " << min;
我建议使用更简单的方法代替您的循环:
int min=D[0][0];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (min > D[i][j])
{
D[i][j] = min;
}
}
}
cout << " Elementi me i vogel eshte : " << min;
int min=D[0][0];
对于(int i=0;iD[i][j])
{
D[i][j]=min;
}
}
}
coutintd[n][n]C++中的数组必须是用编译时表达式表示的,不是运行时值,例如<代码> n>代码>。您刚刚发现,为什么会导致编译器错误的混淆,以及为什么您应该完全忘记C++是C++的一部分。如果您想避免混淆编译器,请停止在代码中使用它。错误消息。谢谢,但这并不能解决问题。main
函数中的min
,if中的min
(int min=0>D[i-1][j-1])
和cout@JPCommander中的min
请不要对会使正确答案无效的问题进行更改。问一个新问题。你是对的,但它不会改变我的问题。干得好!@JPCommander,你的代码中还有其他问题,使用编译器警告,它们会变得很明显。@user4581301,是的,发现得很好。我同意你的想法,但问题出在第22行。坚持下去!@JPCommander这解决了你以后会遇到的一个逻辑问题。你可能会被吓坏,因为你知道a)你一次可以在代码中有多个错误,B)最终报告错误的地方可能离错误的实际位置很远。你正在查找的错误是至少在代码的不同部分发生两个单独错误的结果。@user4581301 sorry我没有注意到这一点,但我认为min[0][0]更好,因为可能所有元素都是正数
int min=D[0][0];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (min > D[i][j])
{
D[i][j] = min;
}
}
}
cout << " Elementi me i vogel eshte : " << min;