结构错误:即使包含它也无法识别

时间:2012-03-15 13:46:51

标签: c++

更多排队: 我从mai结构中得到了一个未被认识的'eld'。

标题包含:

const int c=10;
struct Array
{
int n;
int els[c];
 };

我得到的错误是:

  

错误:请求'A'中的成员'els',它是非类型的类型'Array [(((unsigned int)(((int)a)+ -0x000000001))+ 1)] {aka数组[(((unsigned int)(((int)a)+ -0x000000001))+ 1)]}'

代码:

Array arrayInp()
/* Create 2 vectors by the length defined by the user*/
{
int a,b,i;

cout<<"enter length of the first array: ";
cin>>a;
cout<<"enter length of the second array: ";
cin>>b;

Array A[a],B[b];

cout<<"insert first array:";
for (int i=0;i<a;i++)
{
    cin>>A.els[i];
}


cout<<"insert second array:";
for (int i=0;i<a;i++)
    {
        cin>>B.els[i];
    }
return A,B;
}

还有一个错误,我的回报是正确的,有人可以解释一下如何从函数中返回数组结构吗? 构建错误后:

  

.. \ scr \ main.cpp:32:10:警告:逗号运算符的左操作数无效[-Wunused-value]   .. \ scr \ main.cpp:32:10:错误:无法将'(0,((数组*)(&amp; B)))'从'数组*'转换为'数组'   .. \ scr \ main.cpp:11:10:警告:未使用的变量'i'[-Wunused-variable]   .. \ scr \ main.cpp:33:1:警告:控制到达非空函数的末尾[-Wreturn-type]

3 个答案:

答案 0 :(得分:3)

此:

Array A[a]

定义了一个名为Array的{​​{1}}数组。您需要索引A以访问A的成员或(我怀疑这是您的意图)将声明更改为:

Array

只是要指出可变长度数组不是标准C ++(我认为它们是GCC扩展名)。

Array A, B; 声明:

return

正在使用comma operator。在这种情况下,return A,B; 将返回,并且是B的原因。

warning: left operand of comma operator has no effect警告抱怨在函数unused variable i开头声明的i未使用,这是由于int a, b. i;重新声明i }}:从顶部声明中删除for或不在i循环中重新声明。

如果没有看到完整的源代码,我怀疑for是因为warning: control reaches end of non-void function中没有return 0;

答案 1 :(得分:2)

您可能需要A[i].els,而不是A.els[i]

答案 2 :(得分:1)

除了hmjd评论之外,我想我应该指出,这已经被标准库实现了但更好;在可能的情况下使用std库构造几乎总是更好,因为它们是其他C ++开发人员所熟知的,它们的功能有很好的文档记录,最后它们具有统一的接口,可以与其他标准功能集成(例如标准算法)。

您可以使用两种构造

固定大小:

std::array<int, 6> array_; //an array of six elements

可调整大小

std::vector<int> vector_(6); //a container of six elements.

http://en.cppreference.com/w/cpp/container/array http://en.cppreference.com/w/cpp/container/vector