c++新手头文件问题
C++ novice header file problem
我是c++的初学者,我有头文件管理的问题。我有一个类,矩阵,它的。h和。cpp文件。我还有第二个类Map,它也有自己的。h和。cpp文件。Map.h包含Matrix.h,到目前为止它是有效的。但是当我去编码Map的实现(在Map.cpp中)并且我使用在Matrix.h中定义的东西时,它给了我一个未定义的引用错误。包括Matrix.cpp确实解决了这个问题,但我知道这是一个不好的做法。那我该怎么做,为什么?
非常感谢!
编辑:我做了一个测试。我在Matrix.h中抛出了一个函数声明,在Matrix.cpp中实现它,然后在Map.cpp中使用它。它没有包含Matrix.cpp也能工作。只有属于矩阵类的东西才会变得疯狂。可能您的问题是忘记编译Matrix.cpp。这似乎是一个(对我来说)令人惊讶的常见错误。如何调用编译器?
首先我要问一个显而易见的问题;
在Map.cpp
中是否有#include
和Map.h
?我还会指出Map.h
可能根本不需要包括Matrix.h
。如果你在Map.h
中对Matrix
的唯一引用是指针/引用参数,那么你可以简单地转发声明类:
// forward declare some currently unknown type "Matrix"
class Matrix;
class Map
{
public:
void SomeOperation( const Matrix& matrix );
};
只要参数是指针或引用类型,那么编译器就不需要知道Matrix
的大小,因此一切都可以正常工作。如果可以的话,这比在.h文件中包含更多的头文件要好。然后在Map.cpp
文件中包含Matrix.h
和Map.h
。
您可能希望在编译过程中包含两个。h文件,以便需要计算出定义,而不是通过彼此。
那么你应该链接到矩阵。o,基于在Matrix.cpp中定义一个编译Map.cpp所需的符号的假设。这是正在发生的事情吗?
简单规则:-
- 在头文件中使用保护符,如:-<标题>如果未定义MATRIX_H 标题>
将所有类定义/其他声明放在头文件中。
总是尽量避免包含来自另一个头文件的一个头文件。大多数情况下,extern声明就可以了。链接后会自动解析引用
可以从。cpp文件中包含一个头文件。但是在这里,大多数情况下,事情只需要一个外部声明。
相关文章:
- 使用mongocxx驱动程序时包含头文件问题
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 编译要在英特尔Hyperscan中使用的.cc文件时出现问题
- 使用 seekg() 读取C++中的文件时出现问题
- sqlite3 和生成文件中的链接出现问题
- C++头文件和类实现出现问题
- 用户输入字符串的文件附加问题..C++
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- 读取文件并将其存储在unordered_map中时出现问题
- 编译 llvm 插件时出现问题:llvm/Config/llvm-config.h:没有这样的文件或目录
- 我在使用C++文件时遇到了一些问题
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 将文件复制到自定义位置,存在字符串转换问题
- DirectX12 的问题:"d3dApp.h":没有这样的文件或目录
- (ODR 使用问题)在不同文件中priority_queue名称相同的结构
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- 读取制表符分隔的文件时出现问题 C++
- 当我在 CLion 中读取数组中的 txt 文件时C++编码问题
- 使用 RapidXML 解析大型 XML(大小大于 65 KB)文件时出现问题
- C++:读取.BMP文件时出现问题;文件结束时间早于预期