C++ 错误LNK2019:未解析的外部符号(简单代码)
这是一个非常简单的代码,只是出现了一个错误,尽管我用与其他人相同的方式编写了它 1> Assignment5.obj:错误LNK2019:未解析的外部符号“class std::basic_string,class std::allocator>\uu cdecl promptForString(class std::basic_string,class std::allocator>)”(?promptForString@@YA?AV?$basic)_string@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@V12@@Z)在函数\u main中引用 1> c:\users\aweb\documents\visual studio 2010\Projects\Assignment5\Debug\Assignment5.exe:致命错误LNK1120:1未解析的外部 .cpp文件C++ 错误LNK2019:未解析的外部符号(简单代码),c++,C++,这是一个非常简单的代码,只是出现了一个错误,尽管我用与其他人相同的方式编写了它 1> Assignment5.obj:错误LNK2019:未解析的外部符号“class std::basic_string,class std::allocator>\uu cdecl promptForString(class std::basic_string,class std::allocator>)”(?promptForString@@YA?AV?$basic)_string@DU?$char_trait
#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;
}
#包括
#包括
#包括“anw65_Library.h”
使用名称空间std;
字符串提示字符串(字符串提示);
int main()
{
string name=promptForString(“文件名是什么?:”);
系统(“暂停”);
返回0;
}
.h文件
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
static string promptFromString(string prompt)
{
string filename;
cout << prompt;
cin >> filename;
return filename;
}
#包括
#包括
#包括
使用名称空间std;
静态字符串promptFromString(字符串提示)
{
字符串文件名;
cout>文件名;
返回文件名;
}
您从未为**字符串定义提示**
,而是从**字符串定义了提示**。拼写很重要。此外:
为什么要在.h文件中定义函数?只需在那里声明它们并在.cpp文件中定义它们(除非它们是模板)
不要将使用命名空间的放入头文件中。你只是弄乱了包含你的头的任何东西的全局名称空间
您不需要将该函数标记为静态
这一行:
string promptForString(string prompt);
在.cpp文件中,正在导致问题。它是一个具有外部链接的函数。但是,标题的功能是:
static string promptFromString(string prompt)
{
...
这里的重要部分是静态<代码>静态
表示它具有内部链接。要么去掉静态
,要么去掉前向声明,因为函数不能同时具有内部链接和外部链接
编辑:另外,Ed S.在您的输入错误中找到了一个很好的答案。当您在.h
文件中定义了promptFromString()
时,您可以从主函数调用promptForString()
您可能需要更改其中一个定义。我为自己的平庸感到抱歉。这是一个介绍类的练习,他希望我们学习如何创建自己的标题。非常感谢。@user2097783:不,不,我不会这么说。每个人都从某个地方开始。我不是故意说得那么严厉的。