2013-02-22 50 views
1

這是隻是快到了一個錯誤,即使我把它寫在相同的方式與其他人做同樣的代碼有它錯誤LNK2019:解析外部符號(簡單的代碼)

一個非常簡單的代碼1> assigntment5.obj:error LNK2019:unresolved external symbol「class std :: basic_string,class std :: allocator> __cdecl promptForString(class std :: basic_string,class std :: allocator>)」(?promptForString @@ YA?AV ?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ V12 @@ Z)在函數中引用_main 1> c:\ users \ aweb \ documents \ visual studio 2010 \ Projects \ Assignment5 \ Debug \ Assignment5.exe:致命錯誤LNK1120:1個未解析的外部設備

.cpp文件

#include <iostream> 
#include <string> 
#include "anw65_Library.h" 

using namespace std; 

string promptForString(string prompt); 

int main() 
{ 
string name = promptForString("What is the filename?: "); 

system("pause"); 
return 0; 
} 

.h文件

#include <iostream> 
#include <iomanip> 
#include <string> 

using namespace std; 

static string promptFromString(string prompt) 
{ 
string filename; 
cout << prompt; 
cin >> filename; 
return filename; 
} 

回答

3

你從來沒有定義prompt**For**String,你定義prompt**From**String。拼寫很重要。另外:

  1. 爲什麼要在.h文件中定義函數?只需在那裏聲明它們並在.cpp文件中定義它們(除非它們是模板)。
  2. 請勿將using namespace <whatever>放在頭文件中。你只是把任何包含你的頭文件的全局命名空間弄糟了。
  3. 您不需要將該功能標記爲static
+0

我很抱歉,因爲是平庸的。這是一個介紹課的練習,他希望我們學習創建自己的標題。非常感謝。 – user2097783 2013-02-22 02:35:22

+0

@ user2097783:不,我不會這麼說。每個人都從某處開始。我並不是故意要苛刻。 – 2013-02-22 02:35:50

0

這條線:

string promptForString(string prompt); 

在你的.cpp文件引起的問題。它正在向前分配外部鏈接的功能。但是,您的標題的功能是:

static string promptFromString(string prompt) 
{ 
... 

這裏的重要部分是staticstatic表示它具有內部聯動。要麼擺脫static,要麼擺脫前置聲明,因爲函數不能同時具有內部和外部鏈接。

編輯:另外,Ed S.與你的錯字發現了一個很好的發現。

0

您可以從主要功能中調用promptForString(),而在.h文件中定義了promptFromString()

您可能想要更改其中一個定義。

相關問題