2017-05-11 16 views
-1

重複してマークしないでください。似たような質問がありますが、ポインタを使用して回答したり、同じ問題に対処したり、 C++の代わりにC言語を使用します。C++:構造体の配列を参照渡しで関数に渡す

構造体の配列を関数に渡そうとしていますが、しようとするとエラーが発生します:declaration of ‘a’ as array of references。私は、問題は、コンパイラが構造体の代わりに配列としてそれを読んでいるという事実にあるかもしれないと思うが、私はこの問題をどのように修正するか分からない。

struct StructA { 
    string name; 
    float income; 
    int amount; 
} 

がメイン内のこの構造体宣言:

StructA a[15]; 

をそしてそうのような関数に渡しています:

void FunctionA(StructA& a[], int& count) { //& to pass by reference 

} 

は、私は三つの要素の構造体を定義していますさらに、StructAの定義のすぐ下に、私は上記の関数に対応する関数プロトタイプを持っています。

私は間違っていますか?

編集:誰かがこの質問に別のものをマークしました。そうではない。私はプログラミングの授業の紹介をしています。私が明確に述べたように、私はポインタを使うことはできません。他の質問には何が使われているのでしょうか?ポインタ。違いを見ます?さらに、より実用的なレベルでは、私は既にPass a dynamic array of objects to functionで推奨されている解決策を試してみましたが、それは私にとってはうまくいかず、他の質問ではコメントできませんので、新しい質問をしなければなりません。私は教授、グラージーに尋ねることができるまで待つだけです。

+0

配列を持つ必要がありますか?そうでない場合は、 'StructD'の' std :: vector 'を宣言し、関数に' std :: vector &container'を渡してみてください。 –

答えて

1

は、この構文を使用します。

void FunctionA(StructA (&a) [SIZE], int &count) 

SIZEは、この場合には言及されるべきです。

構文(void FunctionA(StructA &a [SIZE]))は、配列の参照ではなく参照の配列(&)を渡すことを意味します。

また機能付きテンプレートを使用することができますテンプレートを使用アマデウス

ます:によって示されるようにあなたは、配列のsizeであることをあなたはそれを意味する場合countを渡す必要はありません

template <size_t Size> 
void FunctionA(StructA (&a) [SIZE]) 

答えとして、異なるサイズのための機能を有効にする:ジェームズ・ルート

次のようにして、その関数を使用することができます。

StructA a[10]; 
StructA b[20]; 

FunctionA(a); 
FunctionA(b); 
+0

あなたのメソッドを使用しましたが、新しいエラーが発生しました: 'パラメータ 'a'未知の配列の配列への参照を含む' – Matt

+0

@Matt:SIZEを使用してください。私は答えを編集し、より詳細にします。 – Shadi

1

参照することにより任意のサイズの配列を渡すために、あなたが行うことができます:あなたはそれを毎回指定する必要はありませんので、

template <size_t Size> 
void FunctionA(StructA (&a)[Size]) 

それは、配列のサイズを推定します。

StructA a1[10]; 
StructA a2[15]; 

FunctionA(a1); 
FunctionA(a2); 
関連する問題