0

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

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

我开始在 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 类型。我现在想弄清楚如何在不添加大量代码来单独使每个函数接受每种给定类型的情况下解决此问题。哦,我很感激我可以在标题中定义函数。但我认为我们不应该这样做?我认为这个想法是您只需包含声明。

4

2 回答 2

1

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

于 2009-12-19T20:26:14.967 回答
1

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

如果它模板类,请参阅此常见问题解答,了解将模板类分离为头文件/实现的一般问题的描述,以及此问题的解决方案。

于 2009-12-19T20:39:25.340 回答