2013-02-22 114 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()

您可能想要更改其中一个定义。

相关问题