2017-04-20 13 views
0

私は外部関数の中でクラスの変数を設定しようとしていました。私は、これが本当であれば、関数が終了した後にクラスを消去することに終わったと思います。その周りには何がありますか?関数内にオブジェクト変数を設定する

Book bookArray[lineIndex];  
bookArray[0].setTitle("Here!"); 

//function in loop called in main 
for (int i = 0; i<lineIndex; i++) 
{ 
    arrayToBook(tempArray, bookArray[i]); 
} 

cout << bookArray[0].getTitle() << endl; 
//returns empty space 

//function definition 
void arrayToBook(string* tempArray, Book bookIn) 
{ 
    bookIn.setTitle(tempArray[0]); 
    bookIn.setAuthor(tempArray[1]); 
    //other sets 
} 
+2

'bookIn'を参照のように渡してみましょう。' void arrayToBook(string * tempArray、Book&bookIn) ' –

+1

関数の実行終了時に、オブジェクトは値を渡すと破棄されます、あなたのように( 'Book bookIn'); copy( 'bookArray [i]') – max66

+2

あなたは値で 'Book'を渡しているので、コピーされ、すべてがコピーされます。 (元のオブジェクトではなく)コピーに対して変更が行われており、そのコピーは関数の終了後に破棄されます。参照渡しを検討してください。また、表示しているコードスニペットが構文上正しくないので、[mcve]を指定してください。 –

答えて

0

コメントで述べているように、あなたは(非constの)参照によって引数を渡す必要があります。

void arrayToBook(const string* tempArray, Book& bookIn) 
{ 
    bookIn.setTitle(tempArray[0]); 
    bookIn.setAuthor(tempArray[1]); 
    //other sets 
} 

が他のあなただけの新しいコピーを変更します。

関連する問題