2017-04-23 15 views
0
enum state{ 
state_Mmenu, // State 0 
state_settingmenu,  // State 1 
state_gamemenu,  // State 2 
state_savegamemenu,  // State 3 
state_loadgamemenu,  // State 4; 
state_Exit,   // State 5; 
state_other 
}; 

state stateMmenu(); 
state statesettingmenu(string, string); 
state stategamemenu(); 
state statesavegamemenu(string, string, string, ofstream&); 
state stateloadgamemenu(string, string, string, ifstream&); 
state stateExit(); 



int main() 
{ 
state curr=state_other; 

string filename= "PlayerOne.jak"; 
string fname="Player"; 
string lname="One"; 
ifstream inFS; 
ofstream outFS; 



while(curr != state_Exit) 
{ 
    switch(curr) 
    { 
     case state_Mmenu: 
     curr = stateMmenu(); 
     break; 

     case state_settingmenu: 
     curr = statesettingmenu(fname, lname); 
     break; 

     case state_gamemenu: 
     curr = stategamemenu(); 
     break; 

     case state_savegamemenu: 
     curr = statesavegamemenu(fname, lname, filename, outFS); 
     break; 

     case state_loadgamemenu: 
     curr = stateloadgamemenu(fname, lname, filename, inFS); 
     break; 

     default: 
      cout << "Don't Tip the Vending Machine"<<endl; 
      curr = state_Mmenu; 
     break; 
    } 
} 


return 0; 

} 


state statesavegamemenu(string fname, string lname, string filename, 
ofstream outFS) 
{ 
state next=state_savegamemenu; 
int choice4=0; 
cout<<" -Save Game Menu-----------------"<<endl; 
cout<<"1. File Name - "<<filename<<endl; 
cout<<"2. Save" <<endl; 
cout<<"3. Game Menu" <<endl; 
cout<<"----------------------------"<<endl; 
    do 
{ 

    cout << "Choice? "<< endl; 
    cin >> choice4; 
    cin.clear(); 
    cin.ignore(10000,'\n'); 

}while(!cin.good()); 

switch(choice4) 
{ 
    case 1: 
    { 
     cout<<"What would you like to save this file as? "; 
     cin>>filename; 
     cout<<endl; 
     next = state_savegamemenu; 
    } 
    break; 
    case 2: 
    { 
     outFS.open(filename.c_str()); 
     if(!outFS.is_open()) 
     { 
      next = state_savegamemenu; 
      break; 
     } 
     else 
     { 
      outFS<<fname<<endl; 
      outFS<<lname<<endl; 
     } 
     outFS.close(); 
     next = state_savegamemenu; 
    } 

    break; 
    case 3: 
     next = state_gamemenu; 
    break; 
    default: 
    cout << "Bad Input!"<<endl; 
     next = state_savegamemenu; 
    break; 
} 
cout <<endl; 
return next; 
} 

state stateloadgamemenu(string fname, string lname, string filename, 
ifstream inFS) 
{ 
state next=state_loadgamemenu; 
int choice5=0; 
cout<<" -Save Game Menu-----------------"<<endl; 
cout<<"1. File Name - "<<filename<<endl; 
cout<<"2. Load" <<endl; 
cout<<"3. Main Menu" <<endl; 
cout<<"----------------------------"<<endl; 
string filecontent; 
    do 
{ 

    cout << "Choice? "<< endl; 
    cin >> choice5; 
    cin.clear(); 
    cin.ignore(10000,'\n'); 

}while(!cin.good()); 

switch(choice5) 
{ 
    case 1: 
    { 
     cout<<"What file would you like to load? "; 
     cin>>filename; 
     cout<<endl; 
     next = state_loadgamemenu; 
    } 
    break; 
    case 2: 
    { 
     inFS.open(filename.c_str()); 
     if(!inFS.is_open()) 
     { 
      next = state_savegamemenu; 
      break; 
     } 
     else 
     { 
      while(!inFS.eof()) 
      { 
       inFS >> filecontent; 
       if(inFS.good()) 
       { 
        cout << filecontent << endl; 
       } 
      } 
     } 
     inFS.close(); 
     next = state_loadgamemenu; 
    } 

    break; 
    case 3: 
     next = state_Mmenu; 
    break; 
    default: 
    cout << "Bad Input!"<<endl; 
     next = state_loadgamemenu; 
    break; 
} 
cout <<endl; 
return next; 
} 

我得到的错误是stateavegamemenu()和stateloadgamemenu()的未定义的引用。据我所知,这样的链接错误与程序无法找到有问题的函数的定义有关,但我非常清楚地实现了它们,所以我很困惑,为什么会发生这种情况,以及任何帮助将不胜感激。即使我有所有定义的函数获取未定义的引用到错误在C++中

在保存游戏,加载游戏
+0

可能想修剪不会导致错误的代码 – Isaac

+0

为什么你不能包含可能会编译的头文件? –

回答

0

你忘了做,所以它不是调用匹配

state statesavegamemenu(string fname, string lname, string filename, 
ofstream outFS) 
{ 

state statesavegamemenu(string fname, string lname, string filename, 
ofstream& outFS) 
{ 

同样与其他功能,但ifstream的而不是ifstream的&

+0

这是问题,非常感谢!我很愚蠢 – guccimane69

+0

大声笑我犯了同样的错误几十次身份证欣赏它,如果你检查了我的答案虽然:) –

+0

即使我能做到theres最小时间限制!一个简单的问题,你可以看看我的stateavegame,并在哪里我使用cin >>文件名,这应该从用户采取一个文件名,并取代我以前的一个,但由于某种原因,它不会覆盖它,你看到任何明显的问题? – guccimane69