使用struct变量时的c++错误



我有这样一个结构体:

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,我做错了什么?

数组变量allmain函数的局部变量,所以你不能在clearMatrix中引用它,除非你将指向它的指针传递给函数:

int clearMatrix(int var, noduri *all)
{
    cout<<all[1].nod[30];
}

int main()
{
    noduri all[100];
    clearMatrix(5, all);
    return 0;
}

如果你在函数中引用的数组不在它的作用域内,你需要用

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;
}

您正在使用原始数组。这不是个好主意。如果在编译时不知道大小,请使用std::vector,如果在编译时知道大小,请考虑使用std::array ,动态调整大小会导致可测量的性能问题。

c++中原始数组的一个问题是,将它们传递给函数(比如intdouble)一点也不容易。相比之下,std::vectorstd::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];
}

注意,std::array仅在编译器支持c++ 11时可用。对于较旧的编译器,使用boost::array或直接使用std::vector

您所展示的代码将不会被编译,并且没有任何意义。如果我理解正确的话,你想通过函数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;
}

最新更新