2011-12-04 5 views
2

私はコンピューターサイエンスの学生です。私は "指定された戻り値の型が競合する"ということは、通常は関数が宣言される前に関数を使用していることを意味しますが、これは少し異なります。厳格な割り当てのガイドラインに、私は、タスクスケジューラを実装しています(当社独自のマルチ糸通し)と1つのクラスに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'から継承されている場合、矛盾する戻り値の型を持つ2つの 'Start'がありますが、もちろんエラーです。その理由は、 'Schedulable'というオブジェクトを持ち、' ​​Start'を呼び出すと、コンパイラは混乱します。 – Shahbaz

+0

実際のエラーを掲載することはできますか? – FailedDev

答えて

3

問題は、が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

関連する問題