为什么CPP文件名必须与H文件名一致
Why CPP file name must tally with H file name?
首先,很抱歉问了这么愚蠢的问题。我只是觉得它很有趣,我很好奇为什么。我在base.h 中有一个带有虚拟析构函数声明的基类
#ifndef BASE_H_
#define BASE_H_
class Base {
public:
Base();
virtual ~Base();
};
#endif
然后我有一个继承了Child.h 中基类声明的Child类
#ifndef CHILD_H_
#define CHILD_H_
#include "base.h"
class Child : public Base { // (1)
public:
Child();
};
#endif
现在制作一个main.cpp
并放入基类虚拟析构函数的实现中。
#include "Base.h"
Base::Base() {}
Base::~Base() {}
源代码是在Ubuntu 13.04中使用Eclipse C++Kepler编译的。存在一个错误,抱怨undefined reference to 'Base::Base()'
位于(1)。如果我将main.cpp更改为Base.cpp,错误就会消失。
我能知道为什么会发生这种事吗?这是因为Eclipse中的配置吗?如果是,我可以关闭此功能吗?或者这是由于最佳编程实践使得源代码更易于管理?或者这是一个C++规范?
标准中没有规定这不应该起作用,我也不认为eclipse强制执行这种布局。它确实更易于管理和更常见,但决不是一种要求。
您可能没有将main.cpp
添加到构建中,也没有对其进行编译。
这与C++规范无关。它必须在Eclipse中,也许在makefile中。您总是可以考虑从main.cpp(以及#include
)运行一个简单的单行,以保持在那里,并将其余的放在Base.cpp中。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- 从命令行c++发送文本文件名
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 命名空间中具有.h和.cpp文件的类
- 内置函数可查看CPP中的成员变量
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- Cpp-Tuple使用带有变量的get
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 如何在CPP的给定目录中列出UTF编码的文件名?
- 如何打印通话函数的行号和文件名而不是log.cpp
- 使用文件名作为字符串从任意souce .cpp文件中调用函数
- Simple_ls.cpp的C++Boost编译错误-未找到对Boost的引用::文件系统::路径::文件名
- Cpp 预处理器和文件名的基本名称,行号为字符串
- 在cpp中串联字符串和int作为文件名
- 如何在C / CPP中使用ext更改文件名
- 为什么CPP文件名必须与H文件名一致
- 如何为c++可执行文件中的main()方法使用main.cpp以外的文件名