编译时报错“LNK2019 无法解析的外部符号”的可能原因及其解决办法

在VS2022中运行C++程序的时候,有时候会遇到这样的问题:

1>(源文件名称).obj : error LNK2019: 无法解析的外部符号 "public: __cdecl (函数名(参数列表))" (??0(函数名与乱码)@@QEAA@XZ),函数 main 中引用了该符号 1>项目路径\x64\Debug\可执行程序名.exe : fatal error LNK1120: 1 个无法解析的外部命令

遇到这种问题,可以说是很难看出来到底是哪里出的问题,而且在解析代码的时候也不会有任何的标红。

根据我敲代码的经验,可能的原因(不断补充更新中):

目录

1.没有写主函数main

2.类在定义的时候,类的构造函数和析构函数没有实现

3.函数在调用的时候,没有与参数列表完全对应

4. 函数在头文件中的声明与在源文件中的定义(即实现)不一致

​编辑

5. ……


1.没有写主函数main

(初学C语言的时候发现的)

有可能是,你把main错写成了mian,

或者后来的时候,当你兴高采烈地实现了所有功能函数,以为大功告成的时候,激动地按下Fn F5开始调试(不运行),结果被一个冷冰冰的报错弹了回来。忘记写主函数啦!

2.类在定义的时候,类的构造函数和析构函数没有实现

(初学C++中的类的时候发现的)

即使是用{}空实现也可以,但是一定要给出一个实现!

例如:

class Rect
{
private:
    int m_X;
    int m_Y;
public:
    //Rect();//这样可能就会出现这种LNK2019的报错
    Rect(){};//必须给个实现,哪怕是空实现“{}”也可以
    //……//其他成员函数
}

3.函数在调用的时候,没有与参数列表完全对应

(做数据结构的“用栈实现表达式求值”的时候发现的)

尤其是涉及到指针的时候甚至有时不会在代码解析阶段给你标红。

例如:

一个函数的定义是这样的:

Status In(char* c, char str[])
{
    //……
}

那在调用它的时候就要注意了:

char OPSET[7] = { '+','-','*','/','(',')','#' };
//……其它代码
ElemType* c = new ElemType[256];
//……其它代码
//In(c, OPSET);//错误,可能解析代码的时候没有标红,但在代码编译的时候出现LNK 2019的那个报错
In(c, OPSET);//正确

4. 函数在头文件中的声明与在源文件中的定义(即实现)不一致

(做数据结构实习的时候发现的)

有的时候,当你修改了在源文件里面的函数的参数列表,又忘了把头文件里面的函数声明改过来的时候,就会出现这种链接错误。

发现错误的提示之一:在头文件里面的那个函数声明那里会出现警告:“未找到"(函数名)"的函数定义(就像下图这样的)”。因为你在源文件中的函数的参数列表跟它不一样,编译器会认为这是两个函数。

5. ……

如果还有其他可能的情况,欢迎在评论区补充哦!我会及时加进去的!

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
根据引用\[1\],这个错误是由于无法解析外部符号"public: void __thiscall Annotate::copy_clean_image(void)"在函数"void __cdecl mv_MouseCallback(int,int,int,int,void *)"中被引用所导致的。根据引用\[2\]和引用\[3\],这个错误通常是由于声明了某个方法但没有在源文件中实现,或者在代码调整没有正确地添加类名前缀"classname::"所导致的。解决这个问题的方法是找到声明部分,确保方法已经被正确地定义或者重新编译代码。 #### 引用[.reference_title] - *1* [error LNK2019:无法解析外部符号 public: void(找前面的函数)](https://blog.csdn.net/duan19920101/article/details/51018085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [VC++常见错误原因解析之error LNK2019: 无法解析外部符号 "public: void __thiscall](https://blog.csdn.net/liubing8609/article/details/85289447)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【vs C++】error LNK2019: 无法解析外部符号 "public: void __thiscall](https://blog.csdn.net/u013321328/article/details/79628494)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值