2009-12-19 87 views
0

我很抱歉我很确定这是一个相当愚蠢的问题,但我无法让它工作!Dev-C++中的多个文件,链接器错误。模板

我也不确定什么信息是太多的信息,所以我可能不会提供足够的信息,所以也很抱歉 - 只是问。

我开始在main.cpp中编写一个类,它变得很大,所以我决定将它移到不同的源文件。我并不太确定如何做到这一点,也无法找到任何有助于解决互联网资源(因此问题)的具体问题。

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

这也运行得非常好。我开始将类声明切成一个头文件。这个头文件的形式

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

我所读的地方是有用的,但我不完全知道为什么,我认为这是停止的功能重新声明如果头被包含不止一次。

所以目前我们有这个头文件以及其他包括在内。然后是主函数,然后是主函数下面的函数定义。这也编译和运行非常好。

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

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

[连接子错误]未定义参考来matrix <bool>::matrix(int, int)

和代码不运行(明显)。 我该如何解决这个问题?提前致谢。

编辑:我们发现这是由于它是一个模板类,并且在matrix.cpp文件的范围内,模板没有引入到bool类型中。我现在想弄清楚如何解决这个问题,而不需要添加大量的代码来分别让每个函数接受每个给定的类型。 哦,我很欣赏我可以在头文件中定义函数。但我认为我们并不打算这么做?我认为这个想法是,你只是简单地包含声明。

+0

这个问题是“教我如何编程!”虽然互联网是伟大的,但所有的书籍仍然是学习基础知识的更好方式。谷歌搜索和SO问题只会让你到目前为止。一旦你获得了一些基本面,他们会更好地回答有针对性的问题。 – 2009-12-19 20:27:32

回答

1

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

如果它是模板类然后参见this FAQ关于将模板类分离为标头/实现的常见问题的描述以及对此问题的解决方案。

+0

:)。谢谢,这绝对是一个模板问题。读完第一篇FAQ后,我完全理解为什么它不起作用。据我可以告诉它通过代码寻找您的类的实现与它可以找到的任何类型(在我的情况下)T,然后编译该类的特定版本的T类。它有点像自动超载。凉。现在要弄清楚如何解决它。 – VolatileStorm 2009-12-19 22:09:01

+0

在阅读完其他FAQ后,我想知道是否有更好的解决方法?所有的功能都像个人模板范围一样定义。即对于每个功能(标题中预先声明),它们都有 模板 坐在他们面前。这还挺好的,即使这样做有点蛮横。然而这会导致问题,如果我必须添加代码沿线: 模板矩阵 ::矩阵(int,int); 因为我必须为每个数据类型添加一个AND函数。有没有办法做到这一点更短? – VolatileStorm 2009-12-19 22:17:48

1

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