【发布时间】:2010-12-28 09:18:20
【问题描述】:
我很抱歉我很确定这是一个相当愚蠢的问题,但我无法让它发挥作用!
我也不确定什么信息是太多信息,所以我可能不会提供足够的信息,所以也很抱歉 - 问问吧。
我开始在 main.cpp 中编写一个类,但它变得很大,所以我决定将它转移到不同的源文件。我不太确定如何执行此操作,并且无法从 Internet 资源中找到任何帮助解决此特定问题的方法(因此提出问题)。
我从类定义开始,包括主程序函数之上的所有函数定义。这运行良好。然后我把它分成两个独立的部分。主函数上方的类声明(我认为这是正确的术语)和主函数下方的函数定义。
这也运行得很好。我继续将类声明剪切到头文件中。这个头文件的格式是
#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 类型。我现在想弄清楚如何在不添加大量代码来单独使每个函数接受每种给定类型的情况下解决此问题。 哦,我很感激我可以在标题中定义函数。但我认为我们不应该这样做?我认为这个想法是您只需包含声明。
【问题讨论】:
-
这个问题的意思是“教我如何编程!”尽管互联网很棒,但书籍仍然是学习基础知识的更好方法。谷歌搜索和 SO 问题只会让你到目前为止。一旦你掌握了一些基础知识,他们就会更好地回答有针对性的问题。
标签: templates linker-errors dev-c++