Dev-C ++中的多个文件,链接器错误。模板

时间:2009-12-19 20:18:59

标签: templates linker-errors dev-c++

我很抱歉,我很确定这是一个相当愚蠢的问题,但我无法让它发挥作用!

我也不确定哪些信息是太多的信息,所以我可能不会给出足够的信息,对此也很抱歉 - 只要问一下。

我开始在main.cpp中编写一个类,它变得很大,所以我决定将它转移到另一个源文件。我不太清楚如何做到这一点,并且无法找到任何东西来帮助解决互联网资源中的这个特定问题(因此要求)。

我从类定义开始,包括主程序函数之上的所有函数定义。这很好。然后我把它分成两个单独的部分。主函数上面的类声明(我认为这是正确的术语)和主函数下面的函数定义。

这也非常顺利。我继续将类声明剪切成头文件。此头文件的格式为

#ifndef INC_MATRIX_H
#define INC_MATRIX_H
class matrix{
//ETC
};
#endif

我在某处读到的内容很有用,但我不完全确定原因,如果标题包含多次,我认为停止重新声明函数。

所以目前我们将此头文件与其他包含一起包含在内。然后是main函数,然后是main函数下面的函数定义。这也很好地编译和运行。

我采取的下一步是将函数定义剪切到它们各自的.cpp文件中。对此.cpp文件唯一的补充是,必须将一些额外的包含添加到顶部(特别是iostream和cstdlib)。还包括了matrix.h文件。

在这个配置中,当我尝试编译和运行代码时,Dev-C ++会出现链接器错误。具体来说,它们的形式为

  

[链接器错误]对matrix <bool>::matrix(int, int)

的未定义引用

代码没有运行(显然)。 我怎样才能解决这个问题?提前谢谢。

编辑:已经发现这是因为它是一个模板化的类,并且在matrix.cpp文件的范围内,模板没有引入bool类型。我现在想弄清楚如何解决这个问题而不添加大量代码行来单独使每个函数接受每个给定的类型。 哦,我很欣赏我可以在标题中定义函数。但我认为我们不打算这样做?我认为这个想法只是包含声明。

2 个答案:

答案 0 :(得分:1)

我想你可能没有将matrix.cpp添加到你的项目中。它必须构建到matrix.o并将其链接到main.o以创建.exe。

答案 1 :(得分:1)

错误表明您的矩阵类是模板类。是吗?也许发布代码会有所帮助。

如果 是一个模板化的类,那么请参阅this FAQ,了解将模板化的类分离为标题/实现的一般问题的描述,以及此问题的解决方案。