2011-12-04 38 views
2

我是計算機科學專業的學生。我知道「指定的返回類型衝突」通常意味着你在聲明之前使用了一個函數,但這個函數有點不同。由於嚴格的分配指導方針,我執行任務調度(我們自己的多穿線)和被稱爲Task一類,在Task.h有:錯誤:指定的返回類型衝突,與往常不同

void Task::Start(){ 
    int * returnval = new int; 
    *returnval = pthread_create(&thread_id,NULL,tfunc,this);   
    delete returnval; 
} 

然後在另一個文件中,schedulable.h,我們有:

int Schedulable::Start(){ 
    try{ 
     Task::Start(); 
     return 0; 
    }catch(int e) { return 1; } 
} 

當我編譯它,我有一個「矛盾的返回類型」的錯誤:

In file included from scheduler.H:59, from task_test_step2.cpp:9: schedulable.H:162: error: conflicting return type specified for ‘virtual int Schedulable::Start()’ task.h:157: error: overriding ‘virtual void Task::Start()’ 

任何想法如何,我能得到這個發生停止ING?

+0

在哪一行是實際發生的錯誤?你能粘貼真正的錯誤信息,而不是它的簡介? – Gian

+2

'Task'和'Schedulable'之間有什麼關係?如果'Task'繼承自'Schedulable',那麼你有兩個'Start'具有衝突的返回類型,這當然是一個錯誤。之所以這樣,是因爲如果你有一個'Schedulable'的對象並且調用它的'Start',編譯器會感到困惑。 – Shahbaz

+0

你能發佈實際的錯誤嗎? – FailedDev

回答

3

問題是Schedulable::Start重寫Task::Start並將返回類型從void更改爲int。你可能想讓Task::Start也返回一個int:

int Task::Start(){ 
    // no need to use new here! 
    int returnval = pthread_create(&thread_id,NULL,tfunc,this);   
    return returnval; 
} 
+0

好吧,我想它會歸結到這一點,我們被指示不改變頭文件,除非我們能夠證明這麼做的理由,所以我只是確保沒有其他選擇。謝謝,我真的很感激! – cpb