为什么CPP文件名必须与H文件名一致

Why CPP file name must tally with H file name?

本文关键字:文件名 CPP 为什么      更新时间:2023-10-16

首先,很抱歉问了这么愚蠢的问题。我只是觉得它很有趣,我很好奇为什么。我在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中。