我在調用派生類的虛函數時遇到了segfaults的問題。但是,如果我將函數的名稱更改爲與基類中的虛函數的名稱不同,則不會發生這些段錯誤。下面是一些代碼:調用派生類的虛函數時發生Segfault
//in main
//initialize scene objects
//camera
if((camera = (Camera*)malloc(sizeof(Camera))) == NULL){
cout << "Could not allocate memory for camera" << endl;
}
//...code in middle
//inside file parsing...
//infile is an ifstream
//nextString is a char*
if(!strcmp(nextString,"camera")){
camera->parse(infile); //segfault here
}
這是基礎類的頭(在.cpp唯一實例變量在構造函數):
class WorldObj{
public:
WorldObj();
~WorldObj();
virtual void parse(ifstream&) =0;
vec3 loc; //location
};
這裏是我的相機類內部的代碼,我用它來寫虛擬功能:
void Camera::parse(ifstream &infile){
//do parsing stuff
}
解析()在頭文件作爲虛擬無效解析(ifstream的&)聲明;
我在這裏的問題是,如果我重新命名解析()內的攝像頭,以類似CameraParse(),並完全忽視的事實是存在要實現的虛擬功能,代碼工作完全沒問題!
您能否介紹一下爲什麼調用虛函數導致段錯誤?我已經與Valgrind進行了檢查,看看是否有任何內存問題,並且它告訴我有8個字節的無效讀/寫。我明白這意味着我沒有爲我的對象分配內存正確,但我不知道我要去哪裏錯分配。
任何幫助,將不勝感激:)
您是*不*調用虛擬從基類的構造函數,是嗎? – dasblinkenlight 2013-04-08 21:00:53
嘗試在Camera類中將解析函數標記爲虛擬以正確方式覆蓋函數 – 2013-04-08 21:04:49