在c++中使用抽象库

Using abstract library in c++

本文关键字:抽象 c++      更新时间:2023-10-16

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

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 onceifndef的组合意味着它没有正确编译。当我在修复后删除杂注时。但现在的问题是,为什么会这样?它不应该对两者都有效吗?

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

您包含了"A.h",但在其他文件中是"libN/A.h">