2013-03-10 3 views
0

У меня есть один класс, определенный и работающий, который является TempsSet. Но теперь мне нужно создать новый, который использует TempsSet. Это определение класса, которое у меня есть для нового:Класс внутри класса в C++

И это определение класса TempsSet. Это один работает отлично:

#ifndef TEMPSSET_H 
#define TEMPSSET_H 
using namespace std; 

class TempsSet { 
public: 
    // constructors 
    TempsSet(); 
    //Pre:-- //Post:posa el temps per defecte a (0,0) 
    TempsSet(string d, int h, int m, int s); 
    // Pre:--; Post: el temps sera (DL h,m,s) 

    // mètodes consultors 
    string diaLlarg() const; 
    //Pre: Dia entrat correctament; Post: retorna el dia sense abreviar 
    string diaAbr() const; 
    //Pre: Dia entrat correctament; Post: retorna el dia abreviat 
    int hora() const; 
    // Pre: Hora entrada correctament; Post: retorna les hores del temps 
    int minut() const; 
    // Pre: Minuts entrat correctament; Post: retorna els minuts del temps 
    int segon() const; 
    // Pre: Segon entrat correctament; Post: retorna el segons del temps 
    bool esIgual(TempsSet t) const; 
    //Pre: Els dos temps entrats correctament; Post: retorna cert si els dos temps són iguals 
    bool esMajor(TempsSet t) const; 
    //Pre: Els dos temps entrats correctament; Post:retorna cert si el temps actual és major que el paràmetre 
    void mostrar() const; 
    //Pre: Els temps entrats correctament; Post: mostra el temps per pantalla en format d:h:m:s 
    void mostrarLlargs() const; 
    //Pre: Els temps entrats correctament; Post: mostra el temps per pantalla en format sense abreviar 
    void mostrarDHM() const; 
    //Pre: Els temps entrats correctament; Post: mostra el temps en format d:h:m 

    // mètodes modificadors 
    void llegir(); 
    //Pre: h≥0 i 0≤m<60 i 0≤s<60 sino s'ha de tornar a introduir el valor; Post: llegeix el temps des de teclat en format h:m:s. 
    void llegirDHM(); 
    //Pre: h≥0 i 0≤m<60 sino s'ha de tornar a introduir el valor; Post: llegeix el temps des de teclat en format h:m. 
    void incr(int s); 
    //Pre: h≥0 i 0≤m<60 i 0≤s<60; Post: incrementa el temps en el nombre de segons indicat 
    void incr (int d, int h, int m, int s); 
    //Pre--; Post: incrementa el temps en el nombre d’hores, minuts i segons indicats 
    void decr(int s); 
    //Pre: h≥0 i 0≤m<60 i 0≤s<60; Post: decrementa el temps en el nombre de segons indicats 
    void decr(int d, int h, int m, int s); 
    //Pre: h≥0 i 0≤m<60 i 0≤s<60; Post: decrementa el temps en el nombre d’hores, minuts i segons indicats 

private: 
    int a_s; 
    int a_d; 
}; 

#endif // TEMPS_H 

Но когда я пытаюсь скомпилировать, это говорит странные ошибки, что я пропускаю скобку после «D» от этой линии:

sessio(string d, int h, int dur, string nom); 

Это TempsSet делает не указывать тип и указывать на частные атрибуты sessio. Любые идеи? Как я могу решить эти проблемы?

+0

Вы тоже включили заголовки? –

ответ

4

sessio требует определения полного определения TempSet в заголовке. Итак, #include "TempSet.h".

Также avoid using namespace std, особенно в заголовках.

+0

Хорошо, это сработало, спасибо! Чтобы избежать использования 'using namespace std', что я могу заменить? –

+2

@ p.bosch. Причина, по которой вы не должны использовать * с использованием пространства имен * в заголовках, - это вы будете приносить это в каждый файл cpp, который включает заголовок, если он хочет этого или нет. Если это «закрытый» заголовок, который когда-либо использовался только в одном проекте, то это не имеет большого значения. В противном случае просто напишите пространство имен при использовании символа из него, например: * std :: string * – hyde