2015-01-02 2 views
1

позволяет сказать, что у меня есть 3 класса. 1 базовый класс и два производных класса. если я помещу эти 3 в отдельные файлы заголовков, как правильно их включить, чтобы они все видели друг друга? Ill пост некоторые простые примеры кода я нашел:Включая файлы заголовков (включая самих себя)

Polygon.h

// Base class 


class Polygon 
{ 
    protected: 
    int width, height; 
    public: 
    void set_values (int a, int b) 
     { width=a; height=b;} 
}; 

triangle.h

class Triangle: public Polygon 
{ 
    public: 
    int area() 
     { return width * height/2; } 
}; 

rectangle.h

class Rectangle: public Polygon 
{ 
    public: 
    int area() 
     { return width * height; } 
}; 

main.ccp

int main() 
{ 
    Rectangle rect; 
    Triangle trgl; 
    rect.set_values (4,5); 
    trgl.set_values (4,5); 
    cout << rect.area() << '\n'; 
    cout << trgl.area() << '\n'; 
    cin.get(); 
    return 0; 
} 

Я знаю Что включает в себя, мне нужно, я просто не знаю, как правильно устроить их, чтобы сделать эту работу чистой, спасибо!

+0

Какие комбинации вы пытались? – tapananand

+0

@TapanAnand Кажется, что все, от размещения всего в одном глобальном заголовочном файле, до размещения треугольников и прямоугольников в многоугольнике и включая многоугольник в основном, но независимо от того, что я получаю «включает в себя ошибку». Я знаю, что theres более эффективный способ сделать это –

ответ

2

Совершенно очевидно, ваши Rectangle и Triangle классов требуют Polygon быть определены перед ними, так что порядок должен быть:

#include "Polygon.h" 
#include "Rectangle.h" 
#include "Triangle.h" 

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

EDIT:

Для того, чтобы выяснить, почему это работает, когда вы пишете #include "file.h", содержимое файла file.h просто копируются в месте расположения включаемой линии. Итак, теперь, чтобы правильно получить заказ, просто подумайте, какой порядок вы будете соблюдать при определении всех классов в файле main.cpp, и именно так должен быть порядок файлов заголовков.

+0

хорошо, спасибо !, честно говоря, я был глупым, в том числе и повсюду, теперь я снова знаю спасибо –

+0

На самом деле да, принимать вопросы - это хорошая практика здесь. Вы делаете это, щелкнув билет слева от ответа. –

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