更多排队: 我从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]
答案 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