出现错误 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】:
getToken
是Tokens
的成员,因此在定义它时需要告诉编译器您定义的是成员函数,而不是独立函数。
在定义 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的主要内容,如果未能解决你的问题,请参考以下文章
链接来自另一个文件的函数时,Qt 上出现错误 LNK 2019 [重复]