-1

決定性有限オートマトンをプログラムしたいのですが、2つのクラスが必要です。状態と遷移。ただし、クラスに2つの遷移タイプオブジェクトを含めたいのですが、1つの遷移を認識しない状態をブランド化します。

Trans.h:

 #ifndef TRANS_H
 #define TRANS_H
 using namespace std;
 #include <string>
 class Trans
 {
     private:
         int direccion;
         string simbolo;

     public:
         Trans();
         Trans(int dir, string sim);
         void setsm(string sm);
         void setdir(int dir);
         int getdir();
         string getsm();
         virtual ~Trans();
 };
 #endif // TRANS_H

Trans.c:

 #include "Trans.h"

 #include <string.h>
 Trans::Trans(int dir,string sim)
 {
     direccion=dir;
     simbolo=sim;
 }

 Trans::~Trans()
 {
     //dtor
 }
 void Trans::setsm(string sm){
     simbolo=sm;
 }
 void Trans::setdir(int dir){
     direccion=dir;
 }
 int Trans::getdir(){
     return direccion;
 }
 string Trans::getsm(){
     return simbolo;
 }

Estado.h:

 #ifndef ESTADO_H
 #define ESTADO_H
 using namespace std;
 #include <string>
 #include "Trans.h"

 class Estado
 {
     private:
         int ident;
         bool estInit;
          bool estEnd;
          Trans transicion1;
          Trans transicion2;

     public: 
         Estado();
         ~Estado();
         Estado(int ident,bool inits,bool ends);
         void setIdent(int id);
         void setInitS(bool inits);
    void setEndS(bool ends);
    void setTrans1(Trans transis);
    void setTrans2(Trans transis);
         int getIdent();
    bool getInitS();
    bool getEndS();
    Trans getTrans1();
    Trans getTrans2();                 
 };

 #endif // TRANS_H

Estado.c

     #include "Estado.h"
     #include "Trans.h"

     using namespace std;

     Estado::Estado(int ident,bool inits,bool ends)
     {
         this->ident=ident;
         this->estInit=inits;
         this->estEnd=ends;
     }
     Estado::Estado()
     {
         estInit=false;
         estEnd=false;
     }
     Estado::~Estado(){

}
void Estado::setIdent(int id){
    ident=id;
}
void Estado::setInitS(bool inits){
    estInit=inits;
}
void Estado::setEndS(bool ends){
    estEnd=ends;
}
void setTrans1(Trans transis){
transicion1=new Trans();
}
void setTrans2(Trans transis){
    transicion2=transis;
}
int Estado::getIdent(){
    return ident;
}
bool Estado::getInitS(){
    return estInit;
}
bool Estado::getEndS(){
    return estEnd;
}
Trans getTrans1(){
    return transicion1;
}
Trans getTrans2(){
    return transicion2;
}

エラー:

 g++ -c     -c -o Estado.o Estado.c 
 Estado.c: In function ‘void setTrans1(Trans)’: 
 Estado.c:30: error: ‘transicion1’ was not declared in this scope 
 Estado.c: In function ‘void setTrans2(Trans)’: 
 Estado.c:33: error: ‘transicion2’ was not declared in this scope 
 Estado.c: In function ‘Trans getTrans1()’: 
 Estado.c:45: error: ‘transicion1’ was not declared in this scope 
 Estado.c: In function ‘Trans getTrans2()’: 
 Estado.c:48: error: ‘transicion2’ was not declared in this scope 
 make: *** [Estado.o] Error
4

1 に答える 1

6
void setTrans1(Trans transis)

と同じではありません

void Estado::setTrans1(Trans transis)

最初のものは(メンバーではなく)無料の関数を宣言しているため、クラスのメンバーは内部から直接アクセスできません。

于 2013-02-18T06:42:12.503 に答える