C++で、3つのクラスが循環参照しているようで、コンパイルが通りません。
コードを以下に示します。
(クラス名が不自然ですが、問題の本質とは関連がないため、無視してください)
c++
1━━━━━ Actualクラス ━━━━━ 2 1 #ifndef ACTUAL 3 2 #define ACTUAL 4 3 5 4 #include "callback.h" 6 5 7 6 class Callback; 8 7 class Actual { 9 8 public: 10 9 int get() { 11 10 return 3; 12 11 } 13 12 Callback *callback; 14 13 }; 15 14 16 15 #endif 17 18━━━━━ Callbackクラス ━━━━━ 19 1 #ifndef CALLBACK 20 2 #define CALLBACK 21 3 22 4 #include "logic.h" 23 5 24 6 class Logic; 25 7 class Callback { 26 8 public: 27 9 void func() { 28 10 logic->print(); 29 11 } 30 12 Logic *logic; 31 13 }; 32 14 33 15 #endif 34 35━━━━━ Logicクラス ━━━━━ 36 1 #ifndef LOGIC 37 2 #define LOGIC 38 3 39 4 #include <iostream> 40 5 #include "actual.h" 41 6 using namespace std; 42 7 43 8 class Actual; 44 9 class Logic { 45 10 public: 46 11 void print() { 47 12 cout << actual->get() << endl; 48 13 } 49 14 Actual *actual; 50 15 }; 51 16 52 17 #endif 53 54━━━━━ Mainメソッド ━━━━━ 55 1 #include "actual.h" 56 2 #include "callback.h" 57 3 #include "logic.h" 58 4 59 5 int main() { 60 6 Actual actual; 61 7 Callback callback; 62 8 Logic logic; 63 9 64 10 actual.callback = &callback; 65 11 callback.logic = &logic; 66 12 logic.actual = &actual; 67 13 68 14 callback.func(); 69 15 return 0; 70 16 }
エラー出力を以下に示します。
In file included from callback.h:4:0, from actual.h:4, from main.cpp:1: logic.h: In member function ‘void Logic::print()’: logic.h:12:17: error: invalid use of incomplete type ‘class Actual’ cout << actual->get() << endl; ^~ logic.h:8:7: note: forward declaration of ‘class Actual’ class Actual;
解消方法をご存知の方がおりましたら、教えて頂けると幸いです。
回答1件
あなたの回答
tips
プレビュー