在多个项目中包含一个类
visual studio 2010 - C++ Include a class in multiple projects
我想让一个类包含到我的所有项目中,这样当我做一个更改时,它会从该文件的副本更新所有项目。
例如:foo。
class foo
{
public:
foo();
};
extern Foo* pFoo;
foo.cpp
Foo* pFoo;
foo::foo()
{
printf("Foon");
}
main.cpp
#include "foo.h"
int main(int argc, char* argv[])
{
pFoo = new Foo();
return 0;
}
我怎么能包括"foo.h"到多个项目干净,没有任何麻烦?
首先,你不能只在多个项目中包含头文件;项目最终也必须与实施相联系。
有很多方法可以做到这一点;这取决于你想如何工作以及你的工具是什么。
-
例如,如果你正在(你应该)使用源代码控制,一些源代码控制系统将允许你在项目之间共享文件(svn有外部文件,StarTeam有共享文件....)。如果你这样做,每个项目将收到一个文件的副本,当你签出它,你可以正常构建它作为项目的一部分。
-
另一个选择是创建一个库。一旦你选择了这个选项,你必须做出另一个选择——静态库(.lib)或动态库(.dll)。
两者都有优点和缺点。
2.。静态链接似乎"更简单",满足了您的基本需求——只需将这个类编译到您的项目中。然而,静态链接有其局限性。如果你用不同的选项/设置构建你的静态库,而不是你链接到的项目,它可能无法工作。如果您为所有项目(或其特定子集)制定了使用特定选项集的策略,那么这对您来说就不是问题。
要创建静态库,需要创建静态库类型的visual studio项目。当它构建时,它将运行图书管理员而不是链接器。
2. b。DLL解决了(大部分)不同编译器选项的问题(有一些事情会影响使用DLL,比如结构打包)。同样,你在Visual Studio中创建一个DLL类型的项目,它会为你构建DLL。
然后,再一次,你必须做出选择。当您将DLL链接到可执行文件时,您必须选择动态链接或静态链接。要静态链接,您需要在项目中包含一个.lib文件——它应该是与DLL一起创建的。如果您链接到这个.lib,那么程序将在打开时查找并(尝试)加载DLL。
最灵活、最复杂的方法是动态链接。要做到这一点,您必须在代码中加载DLL并创建指向其中您想要使用的任何函数的指针。作为您所描述的问题的解决方案,这可能有些矫枉过正,而且我不确定您将如何访问类(而不是函数)。
无论如何使用DLL,您都必须将其与程序一起分发,并确保程序可以访问它(在与可执行文件相同的文件中,在Windows DLL搜索路径中,或者,在动态加载的情况下,您可以具体指定路径,然后确保将DLL安装到特定位置)。
如果你能管理一个静态库(2.a),它就能解决你所要求的问题,因为一个静态库基本上是间接地在你的项目中包含类——它是你的代码的编译版本,准备链接。
即使你创建了一个库或dll,你也必须在源代码控制中确定如何将其包含在不同的项目中。
单例呢?
class foo
{
foo()
{
printf("foon") ;
}
public:
static foo &make(void)
{
static foo the_instance ;
return the_istance ;
}
};
这样你只有一个实例(这是你想要的吗),并且你确定它是在哪里创建的(这就是为什么constructore被声明为private)。
现在,您可以在一个头文件中包含整个类,而无需进一步的需要。
- 如何将 glfw 库包含在C++项目中?
- 将 somedialog.h 包含在项目的其他部分中会使编译器看不到 ui_somedialog.h
- 搜索字符串是否至少包含一次从 0 到 9 的所有数字的最有效方法
- 至少包含一次字符 X 的 S 的不同子字符串的数量
- 在包含相同项目的向量中删除一个项目
- Qt C++:将所有库文件包含在项目文件夹中
- C++包含一组对象的类
- 将数据文件包含到C++项目中
- 将库和DLL包含在C ++项目中
- Visual studio是否强制将预编译的头文件包含在项目的所有编译单元中
- 如何在CMake中包含具有项目相对路径的目录
- CMake:包含外部项目的错误
- pocketsphinx的简单示例适用于基本的c测试,但不适用于包含在c++项目中的情况
- 我想在C++项目中包含一种脚本语言.Lua vs Bison/Yacc
- 为什么我可以在多个包含const int的cpp文件中包含一个头文件,而不会出现编译器错误
- 如何在同一解决方案中包含其他项目的头文件
- 在msvc中为uint8_t和类似类型包含或项目设置
- 将图像和文件包含到项目中
- C方法是否可能不能包含在C++项目中
- 拥有一个包含MFC项目和用于单元测试的控制台应用程序的解决方案