2013-09-20 3 views
4

У меня возникли трудности с обучением использованию файлов для классов на C++. Чтобы узнать, как я использую учебники Bucky Roberts/The New Boston C++, я пробовал именно то, что он делает, но он не работает.Файлы классов C++

У меня есть main.cpp и OtherClass.cpp с заголовком OtherClass.h для заголовка. Каждый раз, когда я пытаюсь делать OtherClass :: OtherClass() {} для конструктора него ошибки с «C++ требует спецификатор типа для всех деклараций»

Может кто-нибудь дать мне пример того, как правильно делать ++ файлы класса C ? На самом деле это действительно путают.

Спасибо!

+1

Пожалуйста, покажите свой код. –

+2

Вы не узнаете много от него. Получить книгу – khajvah

+0

Похоже, вы не включили заголовочный файл (OtherClass.h) в свой файл реализации (OtherClass.cpp). –

ответ

3

Простой пример использования заголовочных файлов для классов (с реализацией в отдельном файле .cpp) выглядит примерно так:

Ваш файл main.cpp:

#include "OtherClass.h" 

int main() 
{ 
    OtherClass otherClass; 
    //use otherClass here... 

} 

Следующая ваши OtherClass .h файл:

class OtherClass 
{ 
    public: 
    OtherClass(); 

    int someFunction(int parameters); 

}; 

И, наконец, ваш OtherClass.cpp файл:

#include "OtherClass.h" 

OtherClass::OtherClass() 
{ 
    //implementation here 
} 

int OtherClass::someFunction(int parameters) 
{ 
    //implemenation here 
    return 0; 
} 

Основные вещи, которые нужно иметь в виду:

  • #include "OtherClass.h" идет в обоих OtherClass.cpp и main.cpp
  • убедитесь, что вы закончите конструктор и объявления функций с «;» not '{}', если вы определяете реализацию в другом месте.
  • убедитесь, что вы компилируете OtherClass.cpp, а также main.cpp. С MinGW это выглядит как g++ main.cpp OtherClass.cpp
+0

Спасибо, что сделал трюк! Похоже, что некоторые из файлов Bucky Bucky устарели. – JeremyF

0

Ваш вопрос немного загадочен, чтобы понять, но если я правильно понимаю, вы ищете «правильный» способ создания классов с интерфейсами в файле заголовка. Вот пример класса, который делает это:

Scene.h

#pragma once 

#include "Window.h" 
#include "Entity.h" 

class Scene 
{ 
public: 
    Scene(Window *_window); 
    ~Scene(void); 

    void render(Entity item); 
    void render(Entity item, SDL_Rect *clip); 

protected: 
    Window *window; 
}; 

Scene.cpp

#include "Scene.h" 


Scene::Scene(Window *_window) 
{ 
    window = _window; 
} 


Scene::~Scene(void) 
{ 

} 

void Scene::render(Entity item) { 
    render(item, NULL); 
} 

void Scene::render(Entity item, SDL_Rect *clip) { 
    window->draw(item.getImage(), item.getCoordinates(), clip, item.getAngle()); 
} 

Обратите внимание, что файл заголовка содержит заголовки, которые нужны для правильной связи, тогда как файл реализации (.cpp) просто включает файл заголовка. Компонент должен автоматически управлять всеми этими проблемами для вас, пока вы придерживаетесь этой семантики.

Надеюсь, это поможет; если это не так, подумайте о том, чтобы перефразировать ваш вопрос или вставить какой-то код.

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