使用struct变量时出现C ++错误

时间:2014-03-29 11:39:30

标签: c++ struct

我有这个结构:

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

4 个答案:

答案 0 :(得分:6)

数组变量allmain函数的本地变量,因此除非将指针传递给函数,否则无法在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 ++中的原始数组的一个问题是它根本不是(!),因为很容易将它们传递给像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];
}

请注意,只有在编译器支持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;
}