我一直在开发的主要是模板函数库和管理,以保持组织(在某种程度上)东西,在下列方式:创建的模板函数库
// MyLib.h
class MyLib
{
template<class T>
static void Func1()
{
}
template<class T>
static void Func2()
{
}
};
而且显然要愿意作出这个:
MyLib::Func1();
正如你所看到的,随着更多功能的添加,这可能会变得非常难看。至少,我想将它分成不同的文件!
我最初认为定义在MyLib
命名空间在不同的文件功能的批次,然后用MyLib.h
巩固所有的人,但我一直得到了链接错误的卡车 - 当然,我可以把这个方法,如果仔细看这是建议。
有什么想法?
PS:由于大多数这些函数有不同的目标,所以将它们归类到我们实例化对象的类下是没有意义的。我在这里使用了一个class
,所以我不必担心我定义函数的顺序(在MyLib
之间也有相互依赖的函数)。
链接器错误:
所以基本结构是这样的:我有两个类(说& B)编译为静态库和运行这些类的实例的主应用。这些类A & B使用MyLib
中的函数。当A & B正在编译时,我得到LNK4006
警告,其中说明属于MyLib
的符号已经在项目中的OBJ文件中定义,并且它忽略了它。
当它归结到它成为一个LNK2005
错误,指出它是在一个& B.
更新OBJ文件中已经定义的应用程序: 谢谢Mike & Mathieu为内联的想法 - 这是问题!
除了一个问题:我有我明确专业化,这些都导致already defined
错误(LNK2005
)一些模板函数:
template<class t> int Cvt(){}
template<> int Cvt<unsigned char>(){return 1;}
template<> int Cvt<char>(){return 2;}
template<> int Cvt<unsigned short>(){return 3;}
任何想法?
Conlusion:
通过定义模板功能,在一个单独的文件解决了明确的分工问题 - 感谢您的帮助!
这是正确的做法。就个人而言,我不会将它们合并为一个“包含全世界”标题,因为这样会增加编译时间。这样做不应该有链接器错误 - 你能举一个例子或两个? – 2010-01-22 13:56:27
更新为链接器错误 – Jacob 2010-01-22 15:53:21
我们必须查看链接器错误和相关功能来诊断问题。你是否在库中创建命名对象?一般来说,你不应该那样做。 – 2010-01-22 16:26:07