首先,不好意思問這樣一個愚蠢的問題。我覺得很有趣,我很好奇,知道爲什麼。我有一個虛析構函數的基類Base.h爲什麼CPP文件名必須與H文件名相符?
#ifndef BASE_H_
#define BASE_H_
class Base {
public:
Base();
virtual ~Base();
};
#endif
申報然後,我有一個兒童類繼承的基類中聲明Child.h
#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編譯的。抱怨undefined reference to 'Base::Base()'
在(1)有錯誤。如果我將main.cpp更改爲Base.cpp,則錯誤將消失。
我可以知道爲什麼會發生這種情況嗎?這是由於Eclipse中的配置?如果是,我可以關閉此功能嗎?或者這是由於最好的編程實踐,使源代碼更易於管理?或者這是一個C++規範?
此外,如果您使用多個源文件來實現某個類,則無法滿足此限制。 –