首页 文章

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

提问于
浏览
1

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

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

    当您在 .h 文件中定义 promptFromString() 时,从主函数调用 promptForString() .

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

  • 0

    这一行:

    string promptForString(string prompt);
    

    在您的.cpp文件中导致问题 . 它通过外部链接向前传递功能 . 但是, Headers 的功能是:

    static string promptFromString(string prompt)
    {
    ...
    

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

    编辑:同样,Ed S.用你的拼写错误找到了一个很好的发现 .

  • 3

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

    • 为什么要在.h文件中定义函数?只需在那里声明它们并在.cpp文件中定义它们(除非它们是模板) .

    • 不要将 using namespace <whatever> 放在头文件中 . 你只是弄乱了包含你的 Headers 的全局命名空间 .

    • 您无需将该功能标记为 static .

相关问题