我有一个抽象的库,基本上看起来像这样:
A.h
namespace N {
class A
}B.h
#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.所以我在想B.h文件没有被正确包含吗?但是,为什么A的减速是正常的呢?
有什么想法吗?
编辑:所以我找出了最初的问题是什么,pragma once和ifndef的组合意味着它不能正确编译。我在修复后删除了杂注。但现在的问题是为什么会这样呢?难道它不应该同时对两者都起作用吗?
发布于 2013-01-14 10:26:37
#include "A.h"
namespace N {
class B: Public A
}您包含的是"A.h“,但在其他文件中是"libN/A.h”
https://stackoverflow.com/questions/14310574
复制相似问题