错误LNK2019:未解析的外部符号"public:__thiscall user :: user(void)"(?? 0user @@ QAE @ XZ)在函数"..."中引用

tar*_*ino 2 c++ linker

可能重复:
什么是未定义的引用/未解析的外部符号错误,如何解决?

我正在尝试编写大学作业编码,似乎编译时出现问题,我已经对错误进行了Google搜索,并且我看到的修复程序与我的代码无关.我很感激你的帮助.

以下是错误代码:

Error 1 error LNK2019: unresolved external symbol "public: __thiscall user::user(void)" (??0user@@QAE@XZ) 
referenced in function "void __cdecl `dynamic initializer for 'player''(void)" (??__Eplayer@@YAXXZ) 
C:\Users\obinyans\Documents\Visual Studio 2010\Projects\test\test\Challenge 1.obj
Run Code Online (Sandbox Code Playgroud)

以下是我的代码的副本:

#include <iostream>
#include <string>
#include <math.h>

using namespace std;

void storeinfo() ;
void showinfo() ;


class user 
{
    string firstname, lastname, currentteam, position, status ;
    int age ;
public:
    user();
    user(string, string, string, string, string, int) ;
    void setFirstName(string fname)
        {firstname = fname;}
    void setLastName(string lname)
        {lastname = lname;}
    void setCurrentTeam(string cteam)
        {currentteam = cteam;}
    void setPosition(string pos)
        {position = pos;}
    void setStatus(string stat)
        {status = stat;}
    void setAge(int _age)
        {age = _age;}

    string getFirstName()
        {return firstname ;}
    string getLastName()
        {return lastname ;}
    string getCurrentTeam()
        {return currentteam ;}
    string getPosition()
        {return position ;}
    string getStatus()
        {return status ;}
    int getAge()
        {return age ;}
};

user player[20] ;

int main()
{
     ;

    int menu ;

    cout << "MENU" << "\n" ;
    cout << "\n 1. Store Player Information" ;
    cout << "\n 2. Show Player Informaton" ;
    cout << "\n 0. Exit" ;


    cin >> menu ;
    if (menu = 1)
    {
        storeinfo() ;
    }
    else if (menu = 2)
    {
        showinfo() ;
    }
    else if (menu = 0)
    {
        return 0;
    }


    cin.get() ;
    return 0 ;

}

void storeinfo()
{
    string firstname ;
    string lastname ;
    string currentteam ;
    string position;
    string status ;
    int age ;

    for (int i=0; i < 3; i++)
    {
        cout << "Enter First Name : " ; cin >> firstname ;
        player[i].setFirstName(firstname) ;
        cout << "Enter Last Name : " ; cin >> lastname ;
        player[i].setLastName(lastname) ;
        cout << "Enter Player's Age : " ;cin >> age;
        player[i].setAge(age) ;
        cout << "Enter Current Team : " ; cin >> currentteam ;
        player[i].setCurrentTeam(currentteam) ;
        cout << "Enter Position : " ; cin >> position ;
        player[i].setPosition(position) ;
        cout << "Enter Status : " ; cin >> status ;
        player[i].setStatus(status) ;
    }
}

void showinfo()
{
    for (int i=0; i < 3; i++)
    {
        cout << "First Name : " << player[i].getFirstName() << "        " << "Last Name : " << player[i].getLastName() <<
            "       " << "Age : " << player[i].getAge() << "        " << "Current Team : " << player[i].getCurrentTeam() << 
            "       " << "Position : " << player[i].getPosition() << "      " << "Status :  " << player[i].getStatus() ;
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Mr.*_*C64 5

您没有为构造函数提供实现:

class user
{
....
public:
  user();
  user(string, string, string, string, string, int);
....
};
Run Code Online (Sandbox Code Playgroud)

尝试为它们添加实体:

class user
{
....
public:

  // Default constructor
  user()
     // std::string's are default constructed to empty strings.
     // You may want to set a value for age data member.
    : _age(0)
  {
  }

  // Constructor with initialization parameters
  user(string first_name, string last_name, string current_team, 
       string position, string status, int age)
    : _first_name(move(first_name)), 
      _last_name(move(last_name)), 
      _current_team(move(current_team)),
      _position(move(position)), 
      _status(move(status)),
      _age(age)
  {
  }

....
};
Run Code Online (Sandbox Code Playgroud)

请注意,为数据成员提供一些前缀很方便,以区别于参数.一些约定前缀为_m_(例如,name是参数,_name或者m_name是数据成员).

另请注意,在C++ 11中(并且从您的错误代码中我读到您正在使用VS2010,它具有某种形式的移动语义可用),当您传递一个可移动且移动成本低的类,并且您有要创建本地副本(如设置数据成员时),您可以传递值和std::move值,例如

void set_first_name(string first_name)
{
    _first_name = move(first_name);
}
Run Code Online (Sandbox Code Playgroud)

另请注意,getter往往是const:

const string& get_first_name() const
{
    return _first_name;
}
Run Code Online (Sandbox Code Playgroud)