2012-03-15 328 views
0

更多的排隊: 我從mai結構中得到一個無法識別的'eld'。結構錯誤:即使包含它也不被識別

頭包含:

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

我得到的錯誤是:

error: request for member 'els' in 'A', which is of non-class type 'Array [(((unsigned int)(((int)a) + -0x000000001)) + 1)] {aka Array [(((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; 
} 

還有一個錯誤,我回來isent右有人可以解釋我的方式如何從函數返回數組結構? 後構建錯誤:

..\scr\main.cpp:32:10: warning: left operand of comma operator has no effect [-Wunused-value] ..\scr\main.cpp:32:10: error: could not convert '(0, ((Array*)(& B)))' from 'Array*' to 'Array' ..\scr\main.cpp:11:10: warning: unused variable 'i' [-Wunused-variable] ..\scr\main.cpp:33:1: warning: control reaches end of non-void function [-Wreturn-type]

+1

這至少是目前還不清楚,我,代碼試圖實現什麼。 for循環的迭代次數不會爲數組「A」(或「B」)中的每個元素填充「els」的所有元素。是不是應該是動態的(els')成員(由用戶提供大小)?是否有原因沒有使用STL(例如'std :: vector ')。 – hmjd 2012-03-15 14:12:55

回答

3

此:

Array A[a] 

限定的Array陣列稱爲A。你需要指數A訪問的Array成員或(我懷疑這是你的意圖)改變了聲明:

Array A, B; 

只是要指出的是,變長數組不是標準的C++(我認爲他們是一個GCC擴展)。

return聲明:

return A,B; 

使用comma operator。在這種情況下,B將返回並且是warning: left operand of comma operator has no effect的原因。

unused variable i警告抱怨說在功能int a, b. i;未使用的開始宣佈i,這是由於i重新聲明在兩個for循環:無論是從頂部聲明中刪除ifor循環不重新聲明。

沒有看到完整的源代碼,我懷疑warning: control reaches end of non-void function是因爲int main()沒有return 0;

2

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

+0

我做了您所建議的更改,仍然是相同的錯誤: .. \ scr \ main.cpp:32:10:警告:逗號運算符的左操作數沒有效果[-Wunused-value] .. \ scr \ main。 cpp:32:10:error:無法從'Array *'轉換爲'Array' .. \ scr \ main.cpp:11:10:警告:未使用的變量'i'[-Wunused-variable] .. \ scr \ main.cpp:33:1:warning:控制到達非void函數的結尾[-Wreturn-type] – 2012-03-15 13:53:11

+0

@BogdanMaier:'return A ,B;'相當於'return B;'。 – 2012-03-15 13:55:14

+0

你說「還是一樣的錯誤」,但這顯然是一個完全不同的錯誤。你現在看到一個新的錯誤的原因是你的原始代碼實際上有很多錯誤。 – 2012-03-15 14:12:05

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

+0

哦,謝謝,但事情是我需要使用我的建築....這就是要求。 – 2012-03-15 13:57:14

+0

@需要什麼? – 111111 2012-03-15 13:57:34

+0

我對學校有問題。 – 2012-03-15 14:03:23

相關問題