C++ を使っていて、相互にインクルードしなければならない状況が起きた。 相互にインクルードするとたくさんエラーが出たので片方を抜いた。 そうすると、片方は定義されておらずもう片方が多重定義、みたいな状態に。 Task.h taskQueue.h 以外にもソースファイルがあるので、それらも関係して多重定義担っている模様。 In file included from taskQueue.h:1, from Run.h:2, from Run.cc:5: Task.h:24: error: ‘taskQueue’ has not been declared In file included from Run.h:2, from Run.cc:5: taskQueue.h:5: error: expected unqualified-id before ‘[’ token In file included from Run.cc:6: Task.h:4: error: redefinition of ‘class Task’ Task.h:5: error: previous definition of ‘class Task’ 修正前 taskQueue.h #include "Task.h" class taskQueue { Task task; } Task.h #include "taskQueue" class Task { taskQueue task_list; } と言った感じ。 どうにもエラーが取れないので、いつも通り Google 先生にお伺いを立てる。 こういったページを見つけた。 <http://d.hatena.ne.jp/arvitos/20090213/1234519302> これを解決するには、前方宣言という方法を使う必要があるらしい。 という訳で、上の2つのファイルを修正。 修正後 taskQueue.h class Task; class taskQueue { Task task; } Task.h class taskQueue; class Task { taskQueue task_list...
コメント
コメントを投稿