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

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

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

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文件

#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:不,不,我不会这么说。每个人都从某个地方开始。我不是故意说得那么严厉的。