cout<< 理论上它有效的未知编译器错误
Unknown compiler error in cout<< theoreticlly it works
#include <iostream>
using namespace std;
void matrice(int n){
cout<<"Input the number of the elements "<<endl;
cin>>n;
int D[n][n];
cout<<"Input the elements :";
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>D[i][j];
}
}
int min;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if( min=0>D[i-1][j-1]){
D[i-1][j-1]=min;
}
}
}
cout<<" The smallest element is : "<< min<<"and it is the"<< i <<" element ." ;
}
int main(){
int i, min ,j,n;
int n1;
cout<<"Decide: "<<endl;
cout<<"Matrice[1]"<<"\t"<<"Vekcor[2]"<<endl;
cin>>n1;
if(n1==1){
matrice(n);
}
else if(n1==2){
}
}
问题出在 cout 的第 22 行,它给出了以下消息:
C:\Users\use\Documents\Dev C++\void_vektor.cpp|22|错误:'operator<<' 不匹配(操作数类型为 'std::basic_ostream' 和 '')|
主要问题是您在 for
循环中声明 min
,它会在循环退出时超出范围。
奇怪的错误消息可能是因为 std::min
函数。这是一个关于为什么不使用 using namespace std;
.
的很好的案例研究
乍一看,您的代码中还有其他问题:
i
、min
和 j
在 main()
中未使用。
n
未初始化使用,这是undefined behaviour, furthermore C++ forbids variable-size array. If you need a variable length array you can use something like std::vector.
if(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;
另请注意,您在 main 中使用了未初始化的 n
,即使您将其作为函数的输入,向函数发送未初始化的变量也可能会出现问题。
并在将 n
作为输入后移动 int D[n][n];
的声明。
cout<<"Input the number of the elements "<<endl;
cin>>n;
int D[n][n];
我建议这个更简单,而不是你的循环:
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;
另请注意,如果您初始化 min=0
,则无法在包含所有 elements>0
的数组中找到 min
。我建议 min=[0][0]
。
#include <iostream>
using namespace std;
void matrice(int n){
cout<<"Input the number of the elements "<<endl;
cin>>n;
int D[n][n];
cout<<"Input the elements :";
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>D[i][j];
}
}
int min;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if( min=0>D[i-1][j-1]){
D[i-1][j-1]=min;
}
}
}
cout<<" The smallest element is : "<< min<<"and it is the"<< i <<" element ." ;
}
int main(){
int i, min ,j,n;
int n1;
cout<<"Decide: "<<endl;
cout<<"Matrice[1]"<<"\t"<<"Vekcor[2]"<<endl;
cin>>n1;
if(n1==1){
matrice(n);
}
else if(n1==2){
}
}
问题出在 cout 的第 22 行,它给出了以下消息: C:\Users\use\Documents\Dev C++\void_vektor.cpp|22|错误:'operator<<' 不匹配(操作数类型为 'std::basic_ostream' 和 '')|
主要问题是您在 for
循环中声明 min
,它会在循环退出时超出范围。
奇怪的错误消息可能是因为 std::min
函数。这是一个关于为什么不使用 using namespace std;
.
乍一看,您的代码中还有其他问题:
i
、min
和j
在main()
中未使用。n
未初始化使用,这是undefined behaviour, furthermore C++ forbids variable-size array. If you need a variable length array you can use something like std::vector.if(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;
另请注意,您在 main 中使用了未初始化的 n
,即使您将其作为函数的输入,向函数发送未初始化的变量也可能会出现问题。
并在将 n
作为输入后移动 int D[n][n];
的声明。
cout<<"Input the number of the elements "<<endl;
cin>>n;
int D[n][n];
我建议这个更简单,而不是你的循环:
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;
另请注意,如果您初始化 min=0
,则无法在包含所有 elements>0
的数组中找到 min
。我建议 min=[0][0]
。