我无权访问此项目的c++ 11。
我有一个C++类。我们称之为Bar,看起来像这样:
header FooBar.h:
#include "Fancy.h" // <--- Dependency
namespace Foo
{
template<typename T>
class Bar : public Fancy::FancyClass<T, ALLOCATER<HARD_CODED_VALUE>>
{
};
}
Cpp:
没有
花式是一个静态链接到dll的库。问题是,当其他项目要使用dll时,它们包含“FooBar.h”,它表示找不到“FancyBar.h”。
基本上,我希望包含dll的项目能够使用此类而无需任何其他库或 header 。
我的解决方案是将其放在cpp中,并且没有头文件。不幸的是什么也找不到呢?我尝试创建一个空白的头文件,该文件也不起作用。
我试图转发在 header 中声明它,但是要做到这一点,我需要.h来了解什么是FancyClass。我也尝试过
namespace Fancy
{
class FancyClass;
class ALLOCATER;
}
namespace Foo
{
template<typename T>
class Bar : public Fancy::FancyClass<T, ALLOCATER<HARD_CODED_VALUE>>;
}
在标题中。但这会导致许多错误。
最佳答案
简短的答案,您必须在可执行文件中包含 header 才能使用提供的库。
较长的答案,编译器需要知道库中定义的类的结构。
想象一下,有一个名为MyAwesomeClass
的类是您要在可执行文件中使用的库的一部分。当您说MyAwesomeClass awesome;
时,编译器对该类一无所知。它有多大?您可以调用什么方法?它从任何东西继承吗?
此信息包含在声明该类的头文件中。
class MyAwesomeClass
{
private:
std::string _name;
public:
MyAwesomeClass();
MyAwesomeClass(const std::string& name);
void print_name();
};
实现是在DLL或静态库中定义的,但是使用
MyAwesomeClass
类型时,编译器至少需要知道其结构。如果不包含 header ,编译器将抱怨它不知道MyAwesomeClass
是什么类型(即undefined class
错误)。关于c++ - 仅C++实现模板类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35561958/