0

抽象化され、基本的に次のようなライブラリがあります。

ああ

namespace N {
    class A
}

Bh

#pragma once
#ifndef B
#define B
#include "A.h" 
namespace N {
    class B: Public A
}
#endif

そして、ライブラリは次のようにCMakelists.txtで参照されます。

global_add_library(libN A.cpp B.cpp)
target_link_libraries(libN someLibraries)

これで、main次のようなファイルができました。

#include <libN/A.h>
#include <libN/B.h>

N::A a* = new A();
N::B b* = new B();

そしてそれCMakelists.txtはこのように見えます:

global_add_exectubale(application somemainccpfiles.cpp)
target_link_libraries(application libN)

私が得ているのは、

error: ISO C++ forbids deceleration of 'B' with no type.

だから私はBhファイルが正しく含まれていないと思っていますか?しかし、なぜ減速がAうまくいくのですか?

何か案は?

編集:それで、元の問題が何であるか、との組み合わせがpragma once正しくifndefコンパイルされていないことを意味していることがわかりました。それが修正されたら、私がプラグマを削除したとき。しかし今、問題はそれがなぜなのかということです。両方でもうまくいくはずだったのでしょうか?

4

1 に答える 1

1
#include "A.h" 
namespace N {
    class B: Public A
}

含まれている「Ah」ですが、他のファイルでは「libN/Ah」でした

于 2013-01-14T02:26:37.293 に答える