[解決済み】C++ - ネストされたインクルード - 「インクルードが深すぎてエラーになる」ことの回避
2022-02-12 03:33:29
質問内容
C++のコードで次のような接続をしたい場合、ヘッダーファイルの宣言はどのようにすればよいですか? インクルードが深すぎてネストしているエラー」。 ?
私のエッジクラスでは、Nodeオブジェクトを返す必要がある関数がいくつかあります。Edgeクラスにも同じように、Nodeオブジェクトを返す必要がある関数があります。しかし、コンパイラは、このネストされたループを持つことを許可していません。
Node.h
#ifndef _NODE_h__
#define __NODE_h__
#include "Edge.h"
public:
Node();
~Node();
void setName(string);
string getName();
void addEdge(Edge*);
vector<Edge* > getEdges() { return _edges; };
};
#endif
エッジ.h
#ifndef _EDGE_h__
#define __EDGE_h__
#include "Node.h"
class Edge
{
public:
Edge();
Edge(bool);
~Edge();
bool hasBeenSeen() { return _seen; };
void reset() { _seen = false; }; // resets seen param to false
Node* getSource() { return _source; };
Node* getTarget() { return _target; };
void setSource(Node* source) { _source = source; };
void setTarget(Node* target) { _target = target; };
};
#endif
解決方法は?
他の人が提案したように、ヘッダーガードを使用します。しかし、問題のクラスを前方に宣言することも試してみてください。また、少なくとも1つのクラスで(値ではなく)ポインタを扱う必要があるかもしれませんが、コードを見なければわかりません。
ということで、edge.hは以下のような感じでいいと思います。
#ifndef EDGE_H
#define EDGE_H
class Node; // forward declaration
Node functionB();
#endif
なお、このとき 定義 この関数は、別のC++ファイルに記述して、"node.h"をインクルードしてください。
もし、これらのことが非常に複雑に思えるのであれば、設計を簡素化してみてください。ノードとエッジが互いのことを知る必要はないでしょう。一方通行の依存関係で十分です。
最後に、ダブルアンダースコアを含む名前はC++で予約されています。
関連
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】Enterキーを押して続行する
-
[解決済み】デバッグアサーションに失敗しました
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】C++の余分な資格エラー
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件