这是一个非常简单的代码,只是出现错误,即使我有相同的方式写其他人做同样的代码有它
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 回答
当您在
.h
文件中定义promptFromString()
时,从主函数调用promptForString()
.您可能想要更改其中一个定义 .
这一行:
在您的.cpp文件中导致问题 . 它通过外部链接向前传递功能 . 但是, Headers 的功能是:
这里的重要部分是
static
.static
表示它具有内部链接 . 要么摆脱static
,要么摆脱前向声明,因为一个函数不能兼有内部和外部的联系 .编辑:同样,Ed S.用你的拼写错误找到了一个很好的发现 .
您永远不会定义
prompt**For**String
,您定义了prompt**From**String
. 拼写很重要 . 也:为什么要在.h文件中定义函数?只需在那里声明它们并在.cpp文件中定义它们(除非它们是模板) .
不要将
using namespace <whatever>
放在头文件中 . 你只是弄乱了包含你的 Headers 的全局命名空间 .您无需将该功能标记为
static
.