2015-04-16 1 views
0

У меня возникла проблема с Eclipse при создании абстрактных классов. Я не очень привык иметь дело с заголовочными файлами и такими, мой код в основном выглядит следующим образом: (не отображающее все, только базовый класс, чтобы дать представление о том, как он выглядит)C++ eclipse. Абстрактный класс не будет компилироваться

Equipment.h

namespace Equipments { 

class Equipment{ 
public: 
    virtual ~Equipment(); 
    virtual std::string get_category() const = 0; 
protected: 
    Equipment(std::string name); 
private: 
    const std::string name_; 
}; 

class Weapon : public Equipment { 
public: 
    Weapon(std::string name, std::string something_else); 

    virtual ~Weapon(); 

    std::string get_category() const override { return "Weapon"; }; 
private: 
    const std::string something_else_; 
}; 
} //end of namespace 

Теперь я получил проблему как с .h и .cpp файл

в .h файле, под конструктору оружия, я привык писать (так как я не использую файлы заголовков):

Weapon(std::string name, std::string something_else) 
    : Equipment{name}, something_else_{something_else} 
{} 

Поскольку я не могу это сделать (насколько мне известно), как мне отправлять параметры в родительский класс? (в этом случае, позволяя eclipse знать, что я хочу, чтобы мой параметр имени отправлен в родительский класс оборудования)

Должен ли я сделать это в файле .cpp, и если да, то как?

А теперь вторая проблема.

В файле .cpp я создаю мой класс оборудования, как это:

namespace Equipments { 

Equipment::Equipment(std::string name) { 
    name_ = name; 
} 

Equipment::~Equipment() { 
} 

std::string Equipment::get_name() 
{ 
    return name_; 
} 

//etc 

Но я не могу показаться, чтобы создать свой класс оружия. Если я пытаюсь:

Equipment::Weapon(std::string name, std::string something_else) 

Я просто член decleration не найден, и если я стараюсь:

Weapon::Weapon(std::string name, std::string something_else) 

я не получаю никакой функции согласования для вызова «оборудований :: Оборудование :: Оборудование()»

Я просто застрял, не зная, как затмение хочет, чтобы я написал свой код, я знаю, что это немного проблема с noob, но я долгое время не использовал файлы заголовков или C++ в eclipse. Я действительно близок к тому, чтобы просто выбрать свой ноутбук и программу в ubuntu и gedit, вместо этого мне не нужно иметь дело с классами заголовков, однако я тоже ничего не узнаю.

+1

Eclipse - это просто раздутый текстовый редактор, вам не нужно ничего знать, и это действительно не актуально. Теперь, что не может это сделать? Вы попытались получить сообщение об ошибке? Какая ошибка? Или вы почему-то поняли, что это не сработает? – Useless

+0

Вы пытались удалить эту ошибку из отчетов об ошибках (Предпочтения (или свойства проекта) -> C++ -> Анализ кода)? Иногда Eclipse просто немного тупой. – Bikush

ответ

3

Но я не могу создать класс оружия. Если я пытаюсь:

Equipment::Weapon(std::string name, std::string something_else) 

Я просто получить заявление члена не найдено,

Ну, да: ваш класс оружие называется Weapon, и это конструктор называется Weapon::Weapon. Он наследует от Equipment, он не хранится внутри него.

и если я стараюсь:

Weapon::Weapon(std::string name, std::string something_else) 

я

no matching function for call to 'Equipments::Equipment::Equipment()' 

Это просто означает, что вы оставили из конструктора базового класса (так он пытается использовать default constructor, которого не существует) - вы не показываете весь код, но он должен быть

Weapon::Weapon(std::string name, std::string something_else) 
    : Equipment(name) 
    , something_else_(something_else) 
{ 
} 
+0

Хорошо, теперь он работает так, спасибо. Я знаю, что это была простая проблема, но это сложно, если вы не на 100% уверены в том, как работает материал. –

+0

Это правда, но пробная версия и ошибка не являются выигрышной стратегией для изучения этого материала _on its own_. Я говорю, что это потратило час или больше на то, чтобы сделать что-то сложное для компиляции сегодня, но для получения фундамента нужны некоторые справочные материалы. – Useless

 Смежные вопросы

  • Нет связанных вопросов^_^