2013-03-10 41 views
0

我有一个类定义和工作,它是TempsSet。但是现在我需要制作一个使用TempsSet的新版本。这是我为新的类定义的:C++中的类里面的类

#ifndef SESSIO_H 
#define SESSIO_H 

    class sessio { 
     public: 
      // constructors 
      sessio(); 
      //Pre: --; //Post:posa el temps per defecte a (0,0) 
      sessio(string d, int h, int dur, string nom); 
      // Pre: --; Post: el temps sera (DL h,m,s) 
      void mostrarS() const; 
      //Pre: --; Post: mostra per pantalla l'horari d'una activitat 
      void llegirS(); 
      //Pre: --; Post: llegeix per teclat l'horari d'una activitat 
     private: 
      TempsSet a_sess; 
      int a_dur; 
      string a_nom; 
    }; 

    #endif // SESSIO_H 

而这是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

您是否也包含标题? – 2013-03-10 11:41:26

回答

4

sessio需要在其标题中提供完整的TempSet类定义。所以,#include "TempSet.h"

另外,avoid using namespace std,特别是在标题中。

+0

好的,这工作,谢谢! 为了避免使用'using namespace std'我可以用什么来替换它? – 2013-03-10 11:50:34

+2

@ p.bosch你不应该在头文件中使用名称空间*的原因是,你会把它带到包含头文件的每个cpp文件,不管它是否需要它。如果它是一个只在单个项目中使用过的“私人”头部,那么它并不重要。否则,在使用它的符号时只需写入命名空间,如:* std :: string * – hyde 2013-03-10 12:05:33