我想编写一个确定性有限自动机并需要两个类。状态和转换,但我希望在类中包含两个转换类型对象,但我不知道一个转换的品牌状态。
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
答案 0 :(得分:6)
void setTrans1(Trans transis)
与
不同void Estado::setTrans1(Trans transis)
第一个声明了一个自由函数(而不是一个成员),所以类成员不能直接在里面访问。