2011-09-16 24 views
0

私はグーグルで答えを見つけることができません。私はどのように関数に参照によって構造体配列を渡すのだろうかと思っていた。私はポインタでそれをする方法を見つけましたが、参照でも学びたいと思っていました。これまでのところ私のコードです(私と一緒に裸で申し訳ありません、私は物事を学ぶ私の個人的な実験についてコメントしません)。構造体配列を関数に渡す参照で

struct employeeType 
{ 
string firstName; 
... 
double monthlyBonus; 
}; 

void readEmpData(ifstream& infile, employeeType *emp, int length); 

私はちょうど[]はEmployeeType & EMPかはEmployeeType & EMPをしましたが、エラーと私はやったポインタをGoogleで検索しているすべてを取得思いました。 http://pastebin.com/6NfZ3LC4

+0

既にここで回答している:http://stackoverflow.com/questions/1106957/pass-array-by-reference-in-c –

+0

@ダニエル、これは異なる場合があります。彼は配列を返そうとしているようだ。 –

答えて

0

私はあなたがreadEmpDataは、ファイルからの従業員の配列に読みたいと仮定します。

ここに私の学習実験のための明確化のためのペーストビンの完全なコードです。この場合、呼び出し元はそこにある従業員の数がわからないため、配列とその長さは出力パラメータにする必要があります。適切な署名は次のようになります。

void readEmpData(ifstream & infile, employeeType *& emp, int & length); 

または

employeeType * readEmpData(ifstream & infile, int & length); 

またはEmployeeTypeのためのオペレータ<<を定義し、STLを使用して読むことができる:

vector<employeeType> employees; 
copy(istream_iterator(file), istream_iterator(), back_inserter(employees)); 
+0

私はemployeeType *&empを試してエラーを受けました。私はちょうどそれを修正するために* empに立ち往生した。私は、他の方法や他の人の方法について、将来の参照のためにそれらを試した後、コメントノートを作成しました。 –

3

は、固定サイズの配列ですか?ない場合は、テンプレートを使用することができます。

template <unsigned int N> 
void myFunction(Foo (&arr)[N]) 
{ 
    // arr[0] etc. 
} 

当然のことながら、これが唯一のコンパイル時の配列のために動作します:あなたの配列は常に同じ大きさのであれば

void f() 
{ 
    Foo a[10]; 
    myFunction(a); // OK 

    Foo * b = new Foo[11]; 
    myFunction(b); // error, nonsense, b is a pointer, not an array 
} 

(、あなたはスキップすることができます"配列"はC++では1つの型ではなく、T[N]がそれぞれN異なるの型であることに注意してください。 )

0

ポインタは、単一のオブジェクトまたはオブジェクトの配列へのポインタです。違いはありません。配列への参照が見つからないのは、通常は冗長であるためです。

*empは、単一のオブジェクトまたは配列の最初のオブジェクトにアクセスします。

emp[0]は、構文が異なる*empとまったく同じです。どちらもまったく同じように動作します。

emp[1]は、配列内の2番目のオブジェクトを取得します。 C++はあなたが関数に配列を渡したことをどのように知っていますか?それはしません。 は、ポインタが配列を指しているかどうか、および配列のサイズを追跡することを期待しています。

+0

冗長なものを学習することは、まだ有用です。あなたが冗長性を好むボスと立ち往生するときは決して知らない。 –

+0

@ Clayton、私は価値判断をしようとしていませんでした。単にあなたがその主題に関して多くの資料を見つけなかった理由を示唆しています。通常、何かをする2つの異なる方法があるとき、より簡単な方法がCの*唯一の方法であった場合、人々はより単純なものに引き寄せます。 –