ошибка LNK2019: ссылка на неразрешенный внешний символ в функции _main visual c++

У кого-нибудь есть идеи, как это исправить? Я посмотрел в Интернете и изменил настройки своего визуального С++, но он все еще не работает.

class store
{
public:
    int MainMenu();
    store();
private:
    int main;
};

class customer:store
{
public:
    int CustomerMenu();
    customer();
private:
    int cmenu;
};

class employee:store
{
public:
    int EmployeeMenu();
    employee();
private:
    int emenu;

};

int main()
{
    int main;
    store a;
    customer b;
employee c;
a.MainMenu();
if(main = 1)
{
    c.EmployeeMenu();
}
else if(main = 2)
{
    b.CustomerMenu();
}
else
{
    exit(EXIT_SUCCESS);
}
}

int MainMenu()
{
    int main;
cout << "Choose an option: " << endl;
cout << " 1. Administration menu" << endl;
cout << " 2. Customer menu" << endl;
cout << " 3. Exit the program" << endl;
cin >> main;
return main;
}

int CustomerMenu()
{
int cmenu;
cout << " 1. Search Video" << endl;
cout << " 2. View Video Titles" << endl;
cout << " 3. Rent Video" << endl;
cout << " 4. Exit to the Main Menu" << endl;
cout << " 5. Exit the program" << endl;
cin >> cmenu;
return cmenu;

}

int EmployeeMenu()
{
int emenu;
    cout << " 1.  Store Information menu" << endl;
    cout << " 2.  Merchandise Information menu" << endl;
    cout << " 3.  Category Information menu" << endl;
    cout << " 4.  Customer Information menu" << endl;
    cout << " 5.  Employee Information menu" << endl;
    cout << " 6.  Rent a Video" << endl;
    cout << " 7.  Restock Video" << endl;
    cout << " 8.  Sales menu" << endl;
    cout << " 9.  Exit to Main Menu" << endl;
    cout << " 10. Exit the program" << endl;
cin >> emenu;
return emenu;

}

store::store()
{
main = 0;
}

customer::customer()
{
cmenu = 0;
}

employee::employee()
{
emenu = 0;
}

Это дает мне:

Store.obj : error LNK2019: unresolved external symbol "public: int __thiscall customer::CustomerMenu(void)" (?CustomerMenu@customer@@QAEHXZ) referenced in function _main
1>Store.obj : error LNK2019: unresolved external symbol "public: int __thiscall employee::EmployeeMenu(void)" (?EmployeeMenu@employee@@QAEHXZ) referenced in function _main
1>Store.obj : error LNK2019: unresolved external symbol "public: int __thiscall store::MainMenu(void)" (?MainMenu@store@@QAEHXZ) referenced in function _main

person Tiffany    schedule 02.06.2013    source источник
comment
почему у вас есть переменная с именем main?   -  person Elazar    schedule 03.06.2013
comment
не говоря уже о том, что if (main = 1) всегда будет верным. вы имеете в виду ==.   -  person Elazar    schedule 03.06.2013


Ответы (3)


Вы реализуете CustomerMenu() и EmployeeMenu() как обычные функции, а не члены класса. Реализации должны быть;

int customer::CustomerMenu()
{
...

int employee::EmployeeMenu()
{
...
person Joachim Isaksson    schedule 02.06.2013

Реализации ваших функций-членов должны быть определены правильно. Например:

int CustomerMenu()

Должно быть:

int  customer::CustomerMenu(void)

И так далее.

person Carl Norum    schedule 02.06.2013

if(main = 1)
{   //^^should be ==, same as the one below
    c.EmployeeMenu();
}
else if(main = 2)
{
    b.CustomerMenu();
}

Функции-члены должны быть определены с помощью оператора разрешения области:

int CustomerMenu()

должно быть:

int Customer::ustomerMenu()

Незначительный момент:

class employee:store

Вот вы использовали private inheritance, вам действительно нужно подумать, нужно вам это или нет.

person taocp    schedule 02.06.2013
comment
(ОП - новичок. Очевидно, ему не нужно частное наследование.) Синтаксис должен быть class employee : public store. но маловероятно, что employee унаследует от store. - person Elazar; 03.06.2013
comment
@Элазар, я полностью с тобой согласен. - person taocp; 03.06.2013
comment
Спасибо вам обоим за ваш вклад. Как сказал Элазар, я новичок. - person Tiffany; 03.06.2013