2017-04-20 90 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');但是你可以通过引用('Book&bookIn')来传递它,以避免复制和修改传递的对象('bookArray [i]') – max66

+2

你正在通过值'Book',因此它被复制,并且所有正在对副本(而不是原始对象)进行修改,并且该副本在函数退出后被销毁。考虑通过引用传递它。另外,请提供[mcve],因为您显示的代码段在语法上不正确。 –

回答

0

正如评论状态,你应该(非常量)引用传递参数:

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

否则只修改一个新的副本。