2014-12-24 3 views
-3

Привет, народ группы. Я получаю эту ошибку от моего компилятора всякий раз, когда я пытаюсь ее скомпилировать. Эта ошибка произошла со многими из моих других кодов, есть идеи?Я получаю неразрешенный внешний символ

Ошибка 3 Ошибки LNK2019: неразрешенный внешний символ "недействительная __cdecl viewaddressbook (пустоты)" (? Viewaddressbook @@ YAXXZ) ссылка в функции "недействительный __cdecl меню (недействительная)" (? Меню @@ YAXXZ)

Ошибка 2 ошибки LNK2019: неразрешенный внешний символ "недействительный __cdecl RemoveEntry (аннулируется)" (? RemoveEntry @@ YAXXZ) ссылка в функции "меню недействительного __cdecl (аннулируется)" (? меню @@ YAXXZ)

#include "stdafx.h" 
#include <vector> 
#include <map> 
#include <string> 
#include <iostream> 
#include <cstdlib> 
#include <ctime> 

using namespace std; 
void menu(); 
void addentry(); 
void removeentry(); 
void viewaddressbook(); 

map<string, string>names; 



int main() 
{ 
    menu(); 
    return 0; 
} 

void menu() 
{ 
    int choice; 
    cout << "1.View Address Book \n2. Add Entry \n3. Remove Entry" << endl; 
    cin >> choice; 
    switch (choice) 
    { 
    case 1: 
     viewaddressbook(); 
     break; 
    case 2: 
     addentry(); 
     break; 
    case 3: 
     removeentry(); 
     break; 
    } 

} 

void addentry() 
{ 
    string email; 
    string firstlast; 
    cout << "Enter the persons email\n" << endl; 
    cin >> email; 
    cout << "Enter the person's first and last name"; 
    cin >> firstlast; 
    names[email] = firstlast; 
    cout << firstlast << " was added with the email of " << email << endl; 

    cin.get(); 
    cin.ignore(); 
} 

void removeentry(map<string,string> names) 
{ 
    string shrink; 
    int choice; 
    string nametoremove; 
    if (names.empty()) 
    { 
     cout << "You have no one to remove\n"; 
     menu(); 
    } 
    else 
    { 
     cout << "Who do you want to remove ?" << endl; 
     cin >> nametoremove; 
     map<string, string>::iterator itr = names.find(nametoremove); 
     if (itr == names.end()) 
     { 
      cout << "Sorry no one by the name of" << nametoremove; 
     } 
     else if (itr != names.end()) 
     { 
      cout << "You sure you want to remove " << nametoremove << "\n\n1.Yes\n2.No" << endl; 
      cin >> choice; 
      switch (choice) 
      { 
      case 1: 
       names.erase(itr); 
       cout << nametoremove << " was removed"; 
       menu(); 
       break; 
      case 2: 
       menu(); 
       break; 
      } 
     } 
    } 
} 

void viewaddressbook(map<string,string> names) 
{ 
    for (map<string, string>::iterator itr = names.begin(); itr != names.end();) 
    { 
     cout << itr->first << "|" << itr->second; 
    } 
    cin.get(); 
    cin.ignore(); 
    menu(); 
} 
+0

Поскольку нет такой функции не существует в вашем коде. – OldProgrammer

ответ

0

Вы Объявляете функции находятся в верхней части файла как:

void menu(); 
void addentry(); 
void removeentry(); 
void viewaddressbook(); 

но определения, которые вы используете, не совпадают:

void removeentry(map<string,string> names) 
{ 
    // ... 
} 
void viewaddressbook(map<string,string> names) 
{ 
    // ... 
} 

Измените объявления в верхней части, чтобы соответствовать функции определения для фиксации сообщений об ошибках:

void menu(); 
void addentry(); 
void removeentry(map<string,string> names); 
void viewaddressbook(map<string,string> names); 
+1

Он также вызывает viewaddressbook() без параметров. – OldProgrammer

2

Ваши функции

void removeentry(); 
void viewaddressbook(); 

не имеет определений. Скорее всего вы определены

void removeentry(map<string,string> names) 
void viewaddressbook(map<string,string> names) 

так линкер не может решительность вызывает для

removeentry(); 
viewaddressbook(); 
Смежные вопросы