2012-03-15 10 views
0

その他の質問: マイ構造から認識されない 'フィールド'が表示されます。構造エラー:含まれていても認識されません

ヘッダが含まれています

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

答えて

3

この:

Array A[a] 

Aと呼ばれるArrayの配列を定義します。私は、彼らがいると思う(++だけ可変長配列がC標準ではないことを指摘し

Array A, B; 

:あなたはArrayのメンバーにアクセスするには、インデックスAに必要以上に変更宣言を(私はこれがあなたの意図した疑いがあります) GCC拡張)。

return声明:

return A,B; 

comma operatorを使用しています。この場合、Bが返され、warning: left operand of comma operator has no effectの原因となります。トップ宣言からiを削除するかforループで再宣言していない、次のいずれか

unused variable i警告が機能int a, b. i;の先頭で宣言iが、これは両方のforループ内iの再宣言に起因して、未使用であることを不平を言っています。

完全なソースコードを見ることなく、私はint main()にはreturn 0;がないためwarning: control reaches end of non-void functionがあると思います。

2

おそらくA[i].elsで、A.els[i]ではありません。

+0

私はあなたが提案した変更を行いましたが、同じエラー: .. \ scr \ main.cpp:32:10:警告:カンマ演算子の左オペランドは効果がありません[-Wunused-value] .. \ scr \ main。 cpp:32:10:エラー: 'Array0'から 'Array'へ '(0、((Array *)(&B)))'を変換できませんでした .. \ scr \ main.cpp:11:10:警告:使用されていない変数 'i' [-Wunused-variable] .. \ scr \ main.cpp:33:1:警告:制御は非void関数の終わりに達します[-Wreturn-type] –

+0

@BogdanMaier: 'return A 、B; 'は' return B; 'と等価です。 –

+0

あなたは "まだ同じエラー"と言っていますが、それは明らかに全く異なるエラーです。新しいエラーが表示されている理由は、実際に元のコードには複数の問題があったからです。 –

1

私はhmjdのコメントに加えて、私はこれが既に実装されているが、標準のライブラリでは優れていることを指摘しなければならないと思います。他のC++開発者にはよく知られており、その機能は十分に文書化されており、最終的に標準アルゴリズムなど他の標準機能と統合された統一されたインタフェースを備えているため、可能な限りstdライブラリ構造を使用するほうが常に優れています。

は、あなたが使用できる2つの構文があります

固定サイズ:

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

ああ、ありがとう、しかし、私は私の建設を使用する必要があります....それは要件です。 –

+0

@何が必要ですか?私が学校に持っている問題の – 111111

+0

。 –

関連する問題