2013-11-29 3 views
0

Я новичок на C++, и, похоже, я получаю эту ошибку. Это очень расстраивает, так как это полностью препятствует моей работе в этом задании. Я понимаю принцип ошибки, но функция определена до ее вызова, поэтому я этого не понимаю.LNK2019: неразрешенный внешний символ; я не обращаю внимания?

Я получаю следующее сообщение об ошибке:

Error 3 error LNK2019: unresolved external symbol "public: void __thiscall Driver::mainMenu(void)" ([email protected]@@QAEXXZ) referenced in function "public: void __thiscall Driver::customerMenu(class std::vector<class Customer,class std::allocator<class Customer> >)" ([email protected]@@[email protected]@@[email protected]@@@[email protected]@@[email protected]@@Z) H:\Uni\Year 2\FPC++\Tutorial 4\SimpleSavings\SimpleSavings\Main.obj Assignment 

Из этого кода:

#include "Account.h" 
#include "Customer.h" 
#include "Driver.h" 
#include "JuniorCurrentAccount.h" 
#include "CorporateSavingsAccount.h" 
#include "StudentSavingsAccount.h" 
#include "CurrentAccount.h" 
#include "Transaction.h" 
#include <stdlib.h> 
#include <iostream> 
#include <string> 
#include <vector> 
using namespace std; 

static int customerIndex = 0; 
static int accountIndex = 0; 
static int accNum = 1; 
static Driver d; 

void mainMenu() { 
while (true) 
{  
    vector<Customer> customers; 

    if (customers.size() == 0) 
    { 
     cout << "________________________" << endl; 
     cout << "//CURRENT CUSTOMER: NO CUSTOMERS" << endl; 
     cout << "//CURRENT ACCOUNT: NO ACCOUNTS" << endl; 
    } else if (customers.at(customerIndex).getAccounts().size() == 0) 
    { 
     cout << "________________________" << endl; 
     cout << "//CURRENT CUSTOMER: " << customers.at(customerIndex).getName() << endl; 
     cout << "//CURRENT ACCOUNT: NO ACCOUNTS" << endl; 
    } else 
    {  
     cout << "________________________" << endl; 
     cout << "//CURRENT CUSTOMER: " << customers.at(customerIndex).getName() << endl; 
     cout << "//CURRENT ACCOUNT: " << customers.at(customerIndex).getAccounts().at(accountIndex).getAccountNum() << " (" << customers.at(customerIndex).getAccounts().at(accountIndex).getType() << ")" << endl; 
    } 
     cout << "//MAIN MENU " << endl; 
     cout << "||Customers (1) " << endl;  
     cout << "||Accounts (2) " << endl; 
     cout << "||Transactions (3) " << endl; 
     cout << "||"; 

    int mainMenuChoice; 
    cin >> mainMenuChoice; 

    if (mainMenuChoice == 1) 
    { 
     d.customerMenu(customers); 
    } 

    int c; 
    cin >> c; 
} 
} 

//tier 1 
void Driver::customerMenu(vector<Customer> customers) 
{ 
cout << "________________________" << endl; 
cout << "//CUSTOMER MENU" << endl; 
cout << "||Create new customer (1) " << endl; 
cout << "||Select a customer (2) " << endl; 
cout << "||List all customers (3) " << endl;  
cout << "||Delete a customer (4) " << endl; 
cout << "||Back (5)" << endl; 
cout << "||"; 

int customerMenuChoice; 
cin >> customerMenuChoice; 

if (customerMenuChoice == 1) 
{ 
    createCustomer(customers); 
} else if (customerMenuChoice == 2) 
{ 
    if (customers.size() == 0) 
    { 
     { 
      cout << "________________________" << endl; 
      cout << "//CUSTOMER SELECTIONS" << endl; 
      cout << "||There are no customers! " << endl; 

      customerMenu(customers); 
     } 
    } else 
    { 
     selectCustomer(customers); 
    } 
} else if (customerMenuChoice == 3) 
{ 
    listCustomers(customers); 
} else if (customerMenuChoice == 4) 
{ 
    cout << "||TBI"<< endl; 
} else if (customerMenuChoice == 5) 
{ 
    mainMenu(); 
} 
} 
+2

Неразрешенный символ: public: void __thiscall Driver :: mainMenu (void) 'not' public: void mainMenu (void) '. Поэтому компилятор ожидает функцию 'mainMenu' в классе' Driver'. Ваше определение 'mainMenu' отсутствует в классе. Это глобально. Я уверен, что вы объявили его как функцию-член в заголовке. Это его реализация, которую ищет компилятор. – nakiya

+0

@nakiya: Вы должны опубликовать эту информацию в качестве ответа. Он читается как один, за исключением «Я уверен», который запускает последнее предложение. Я бы изменил это на «Вероятно». :-) –

+0

@KenWhite: Хорошо, буду. Благодарю. – nakiya

ответ

3

Неразрешенные символ является публичной: void __thiscall Driver::mainMenu(void) не public: void mainMenu(void). Поэтому компилятор ожидает mainMenu функции в классе Driver. Ваше определение mainMenu не относится к классу. Это глобально. Вероятно, вы его объявили как функцию-член в заголовке. Это его реализация, которую ищет компилятор.