我有这个结构:
struct noduri {
int nod[100];
};
和这个功能:
int clearMatrix(int var)
{
cout << all[1].nod[30];
}
int main()
{
noduri all[100];
cout << all[1].nod[30];
return 0;
}
我希望将结构分配给数组all[]
的所有100个元素,当我cout << all[1].nod[30];
时,一切正常,没有错误,输出0
。当我致电clearMatrix(1)
时,我收到此错误:error: request for member nod in all[1], which is of non-class type int
,我做错了什么?!
答案 0 :(得分:6)
数组变量all
是main
函数的本地变量,因此除非将指针传递给函数,否则无法在clearMatrix
中引用它:
int clearMatrix(int var, noduri *all)
{
cout<<all[1].nod[30];
}
int main()
{
noduri all[100];
clearMatrix(5, all);
return 0;
}
答案 1 :(得分:3)
你在函数中引用的数组不在其范围内,你需要将其作为
int clearMatrix(int var,noduri *all)
{
cout<<all[1].nod[30]; // as here you have the base address of the array of type noduri you can refer it.
}
int main()
{
noduri all[100];
clearMatrix(5, all);
return 0;
}
答案 2 :(得分:1)
您正在使用原始数组。那不是个好主意。如果在编译时未知大小,请使用std::vector
,如果在编译时已知,则考虑std::array
动态调整大小会导致可衡量的性能问题。
C ++中的原始数组的一个问题是它根本不是(!),因为很容易将它们传递给像int
或double
这样的函数。相比之下,std::vector
和std::array
与任何其他普通类型一样容易传递给函数。
这是一个完整的例子:
#include <array>
#include <iostream>
struct noduri {
std::array<int, 100> nod;
};
void clearMatrix(std::array<noduri, 100> const &array) {
std::cout << array[1].nod[30];
}
int main() {
std::array<noduri, 100> all;
std::cout << all[1].nod[30];
}
请注意,只有在编译器支持C ++ 11时,std :: array才可用。对于较旧的编译器,请使用boost::array
或仅使用std::vector
。
答案 3 :(得分:1)
您展示的代码不会被编译,也没有任何意义。如果我已经正确理解你想要在函数clearMatrix中通过某个值分配数组的每个元素。如果是这样,那么代码将按以下方式显示
#include <iostream>
struct noduri
{
int nod[100];
};
int clearMatrix( noduri *matrix, int size, int var )
{
for ( int i = 0; i < size; i++ )
{
for ( int &n : matrix[i].nod ) n = var;
}
}
int main()
{
const int N = 100;
noduri all[N] = {};
std::cout << all[1].nod[30] << std::endl;
clearMatrix( all, N, 10 );
std::cout << all[1].nod[30] << std::endl;
return 0;
}