简体   繁体   English

即使我已经定义了所有功能,也无法获得对C ++中错误的未定义引用

[英]Getting an undefined reference to error in c++ even though I have the functions all defined

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

The error that I'm getting is an undefined reference to statesavegamemenu(), and stateloadgamemenu(). 我得到的错误是对statesavegamemenu()和stateloadgamemenu()的未定义引用。 To my knoweledge a linker error like this has to do with the program not being able to find the definition for the functions in question, but I very clearly have them implemented so I'm very confused as to why this is happening, and any help would be appreciated. 据我所知,这样的链接器错误与程序无法找到相关功能的定义有关,但是我非常清楚地实现了它们,因此我对为什么会发生这种情况以及任何帮助感到非常困惑将不胜感激。

in the save game and load game you forgot to do this so its not matching the calls 在保存游戏和加载游戏中,您忘记了执行此操作,因此与呼叫不匹配

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

to

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

same with the other function but ifstream instead of ifstream& 与其他函数相同,但用ifstream代替ifstream&

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM