0

我有一个抽象的库,基本上看起来像这样:

namespace N {
    class A
}

溴化氢

#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 回答