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

时间:2013-11-21 13:31:23

标签: c++ eclipse

首先,对不起要问这么愚蠢的问题。我觉得它很有趣,我很好奇,知道为什么。我在Base.h中有一个带有虚析构函数声明的基类

#ifndef BASE_H_
#define BASE_H_

class Base {
public:
    Base();
    virtual ~Base();
};
#endif

然后我在Child.h中有一个Child类继承的Base类声明

#ifndef CHILD_H_
#define CHILD_H_

#include "base.h"
class Child : public Base {  // (1)
    public:
        Child();
};
#endif

现在创建一个main.cpp并放入Base类虚拟析构函数的实现。

#include "Base.h"

Base::Base() {}
Base::~Base() {}

源代码是在Ubuntu 13.04中使用Eclipse C ++ Kepler编译的。在(1)时抱怨undefined reference to 'Base::Base()'有错误。如果我将main.cpp更改为Base.cpp ,则错误将消失。

我可以知道为什么会这样吗?这是由于Eclipse中的配置吗?如果是,我可以关闭此功能吗?或者这是由于最好的编程实践,以便源代码更易于管理?或者这是一个C ++规范?

2 个答案:

答案 0 :(得分:1)

标准中没有规定这不起作用,我也不认为eclipse强制执行此布局。它确实更易于管理和普遍,但绝不是一项要求。

您可能没有将main.cpp添加到构建中,并且它没有被编译。

答案 1 :(得分:1)

这与C ++规范有 nothing 。它必须在Eclipse中,也许在makefile中。您总是可以从main.cpp(以及#include)运行一个简单的单行来保留它,并将其余部分放在Base.cpp中。