我有一个抽象的库,基本上看起来像这样:
啊
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
意味着它没有正确编译。当我在修复后删除了编译指示。但现在的问题是为什么会这样?它不应该对两者都有效吗?