Прежде всего, извините за задание такого глупого вопроса. Мне просто интересно, и мне было любопытно узнать почему. У меня есть базовый класс с виртуальным деструктора объявить в Base.hПочему имя файла CPP должно совпадать с именем файла H?
#ifndef BASE_H_
#define BASE_H_
class Base {
public:
Base();
virtual ~Base();
};
#endif
А то у меня есть дочерний класс, унаследованный класс Base декларировать 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() {}
Исходный код был составлен с использованием Eclipse, C++ Kepler в Ubuntu 13.04. Существует недоразумение, что undefined reference to 'Base::Base()'
на (1). Если I измените main.cpp на Base.cpp, ошибка исчезнет.
Могу ли я узнать, почему это могло случиться? Это связано с конфигурацией в Eclipse? Если да, могу ли я отключить эту функцию? Или это из-за лучших методов программирования, так что исходный код гораздо более управляемый? Или это спецификация C++?
Кроме того, если вы используете несколько исходных файлов для реализации класса, такое ограничение невозможно встретить. –