0

コネクタ.hpp

#ifndef __CONNECTOR_HPP_
#define __CONNECTOR_HPP_

#include <a/b/c/connection.hpp>

namespace a {
    namespace b {
        namespace c {

        class connector {
        public:
            explicit connector(const int port);
            void run();
            void stop();
        };

    }
}
}
#endif

接続.hpp

#ifndef __CONNECTION_HPP_
#define __CONNECTION_HPP_

#include <a/b/c/connector.hpp>

namespace a {
    namespace b {
        namespace c {
                
            class connection {
            private:
              connector owner_; //line 42

            };

        }
    }
}

#endif

これらの単純なクラスには、cpp ファイルにいくつかの単純な (空の) 実装があります。
これをコンパイルしようとすると、VS2012はこれを言います:

エラー 1 エラー C2146: 構文エラー: ';' がありません 識別子 'owner_' c:\a\b\c\connection.hpp 42 1 テストの前

エラー 2 エラー C4430: 型指定子がありません - int と見なされます。注: C++ は default-int c:\a\b\c\connection.hpp 42 1 テストをサポートしていません

問題は、VSエディターに問題がないことです-赤い下線などはありません。インクルードパスは正しく設定されています。インクルードに追加して、相対$(SolutionDir)\..\パスの代わりにフルパスを使用できるようにしました。a/b/c

それでも、これはコンパイルされません..しかし、一度はコンパイルされました。

Q: なぜですか?

4

2 に答える 2

3

多くの場合、これらの循環#includeディレクティブは致命的です。それは確かにここで起こっていることです。#include "connector.hpp"他のファイルにいるとします。何が起こるかというと、connector.hpp が#include "connection.hpp". このファイルは順番#include "connector.hpp"に . 最終的には のclass connection前に定義されていclass connectorます。のデータ メンバclass connectionは のインスタンスであるため、これは問題ですclass connector

connector.hpp に connection.hpp が含まれているのはなぜですか?

于 2012-10-06T20:00:32.597 に答える