Получение неопределенной ссылки на ошибку в c ++, хотя у меня есть все функции, определенные

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;
}

Ошибка, которую я получаю, является неопределенной ссылкой на Statesavegamemenu () и Stateloadgamemenu (). Насколько мне известно, ошибка компоновщика связана с тем, что программа не может найти определение для рассматриваемых функций, но я очень четко реализовал их, поэтому я очень озадачен тем, почему это происходит, и любой помощью будет оценено.

0

Решение

в сохраненной и загруженной игре вы забыли это сделать, поэтому вызовы не совпадают

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

в

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

то же самое с другой функцией, но ifstream вместо ifstream&

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector