这是一个非常简单的代码,只是出现错误,即使我的编写方式与其他人使用相同代码的方式相同
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;
}
答案 0 :(得分:3)
您永远不会定义prompt**For**String
,您定义了prompt**From**String
。拼写很重要。也:
using namespace <whatever>
放在头文件中。你只是弄乱了包含标题的全局命名空间。static
。答案 1 :(得分:0)
这一行:
string promptForString(string prompt);
在.cpp文件中导致问题。它正在使用外部链接来转发函数。但是,标题的功能是:
static string promptFromString(string prompt)
{
...
这里的重要部分是static
。 static
表示它具有内部链接。要么摆脱static
,要么摆脱前向声明,因为函数不能同时具有内部和外部联系。
编辑:同样,Ed S.在您的拼写错误中找到了一个很好的发现。
答案 2 :(得分:0)
在promptForString()
文件中定义promptFromString()
时,您可以从主要功能拨打.h
。
您可能想要更改其中一个定义。