出现错误 LNK2019 和错误 LNK1120

Posted

技术标签:

【中文标题】出现错误 LNK2019 和错误 LNK1120【英文标题】:Getting errors LNK2019 and error LNK1120 【发布时间】:2014-10-24 04:18:50 【问题描述】:

我似乎无法弄清楚为什么我不断收到这两个错误。我认为我没有在 htmllexicalSyntax.cpp 中正确引用 getToken(br, track) 函数,但我不确定如何修复它。

这是它给我的错误。

1>HTMLlexicalSyntax.obj : error LNK2019: unresolved external symbol "enum Tokens::TokenType __cdecl getToken(class std::basic_istream<char,struct std::char_traits<char> > *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?getToken@@YA?AW4TokenType@Tokens@@PAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@4@@Z) referenced in function _main

1>C:\Users\John\Documents\College\CS 280\FALL 2014\HTML LEXICAL SYNTAX\Debug\HTML LEXICAL SYNTAX.exe : fatal error LNK1120: 1 unresolved externals

这是我的头文件。

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <istream>
#include <ostream>
#include <string>


class Tokens

public:
enum TokenType 

TEXT,
LANGLE,
RANGLE,
SLASH,
ID,
EQ,
QSTRING,
OTHER,
END,

;

Tokens getToken(std::istream*br, std::string&lexeme);

;

HTMLlexicalSYNTAX.cpp

#include "stdafx.h"
#include "TOKENS.h"
#include <iostream>
#include <fstream>
#include <istream>
#include <ostream>
#include <string>

using namespace std;

什么在我的 int main(int argc, char* argv[]):

Tokens::TokenType getToken(istream*br, string& lexeme);
    while(br->good())
        getline(*br, track);
        while (!looking)
            if(track == "/0")
            looking = true;
            

            else 
                spot = track.find("\n");
                if (spot == -1)
                    looking = true;
                    spot = track.length();
                

                track = track.substr(0, spot);
                getToken(br, track);


            

           

        


GetTokens.cpp

#include <iostream>
#include <fstream>
#include <istream>
#include <ostream>
#include <string>
#include "TOKENS.h"

using namespace std;

void getToken(istream*br, string& lexeme)

【问题讨论】:

约翰,感谢您加入 ***。请提供MCVE,它将简化流程并鼓励人们帮助您。 你有三个getToken 的声明,都不同。有一个类Tokens的成员函数,返回Tokens。然后有一个非成员函数返回Tokens::TokenType。最后,还有另一个非成员函数返回void。这三个中只有一个实际实施。你真的想要哪种方式? @IgorTandetnik 希望在我的头文件中声明 getTokens 并在我的 getTokens.cpp 中定义它 您所说的getTokens 是什么?如果有的话,它与getToken 有什么关系? @IgorTandetnik 我的错误我的意思是getToken 【参考方案1】:

getTokenTokens 的成员,因此在定义它时需要告诉编译器您定义的是成员函数,而不是独立函数。

在定义 getToken 函数的主文件中,将其定义为类的一部分,如下所示:

Tokens::TokenType Token::getToken(istream*br, string& lexeme)

虽然我不确定为什么当你有一个名为“GetTokens.cpp”的文件时你在 main 中有这个。考虑将整个内容移至“GetTokens.cpp”

在“GetTokens.cpp”中,您当前对返回 void 的函数有另一个定义。去掉这个,因为你只想要一个定义。

【讨论】:

它仍然给我一个关于重载函数的错误。 啊 - 我没有看到你对 getToken 的其他定义,我将编辑我的答案。 谢谢,这实际上是我最终做的事情。【参考方案2】:

LNK2019 是一个链接错误,一个未解决的符号,目前尚未指定。请编辑您的问题以包含编译输出,以便我们为您提供帮助。

您的 IDE 是 Visual Studio,对吗?您将需要编辑项目属性以指定源代码文件之间的依赖关系。未指定的依赖关系导致 LNK2019 链接错误。

【讨论】:

是的,我的 IDE 是 Visual Studio。我该怎么做呢?

以上是关于出现错误 LNK2019 和错误 LNK1120的主要内容,如果未能解决你的问题,请参考以下文章

vs2010中出现lnk2019和lnk1120错误

编译dll但出现错误LNK2019

不断收到错误lnk2019

链接来自另一个文件的函数时,Qt 上出现错误 LNK 2019 [重复]

C/C++ 混合程序中的错误 LNK2005 和错误 LNK2019

关于我遇到的“LNK 2019无法解析的外部符号”的链接错误