错误LNK2019:未解析的外部符号(简单代码)

时间:2013-02-22 02:17:41

标签: c++

这是一个非常简单的代码,只是出现错误,即使我的编写方式与其他人使用相同代码的方式相同

  

1> assigntment5.obj:错误LNK2019:未解析的外部符号“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 个答案:

答案 0 :(得分:3)

您永远不会定义prompt**For**String,您定义了prompt**From**String。拼写很重要。也:

  1. 为什么要在.h文件中定义函数?只需在那里声明它们并在.cpp文件中定义它们(除非它们是模板)。
  2. 不要将using namespace <whatever>放在头文件中。你只是弄乱了包含标题的全局命名空间。
  3. 您无需将该功能标记为static

答案 1 :(得分:0)

这一行:

string promptForString(string prompt);

在.cpp文件中导致问题。它正在使用外部链接来转发函数。但是,标题的功能是:

static string promptFromString(string prompt)
{
...

这里的重要部分是staticstatic表示它具有内部链接。要么摆脱static,要么摆脱前向声明,因为函数不能同时具有内部和外部联系。

编辑:同样,Ed S.在您的拼写错误中找到了一个很好的发现。

答案 2 :(得分:0)

promptForString()文件中定义promptFromString()时,您可以从主要功能拨打.h

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