error LNK2019: 无法解析的外部符号 _main,函数 “int __cdecl invoke_main(void)“ (?invoke_main@@YAHXZ) 中引用了该符号1>

文章描述了一位开发者在使用C++编写将类数据写入二进制文件的代码时遇到的链接错误,错误为_LNK2019,无法解析外部符号_main。问题源于main函数的拼写错误,修正后程序成功运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:写了一个将类数据以二进制方式写入指定文件的c++代码,报错error LNK2019: 无法解析的外部符号 _main,函数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 中引用了该符号
1>E:\XXX\Debug\文件操作.exe : fatal error LNK1120: 1 个无法解析的外部命令

开发环境:Win10 + VS2022

错误分析:错误列表提示链接出问题,无法解析的外部符号_main,所以考虑是否为main主函数在定义的时候出了问题,找不到程序入口

源代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

class Person {
public:
	char m_Name[64];//用C语言写一般不会出问题,因为C是底层
	int m_Age;
};

void test01() {
	ofstream ofs("person.txt", ios::binary | ios::out);
	//ofs.open("person.txt", ios::binary | ios::out);
	//写文件
	Person p = {"张三", 18};
	//&p返回的是Person*类型,所以需要强转
	ofs.write((const char*)&p, sizeof(Person));

	ofs.close();
}

int mian() {
	test01();
	system("pause");
	return 0;
}

解决方法:经检查,main函数定义时拼写错误,加以修正

修改后:无报错,成功运行

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

class Person {
public:
	char m_Name[64];//用C语言写一般不会出问题,因为C是底层
	int m_Age;
};

void test01() {
	ofstream ofs("person.txt", ios::binary | ios::out);
	//ofs.open("person.txt", ios::binary | ios::out);
	//写文件
	Person p = {"张三", 18};
	//&p返回的是Person*类型,所以需要强转
	ofs.write((const char*)&p, sizeof(Person));

	ofs.close();
}

int main() {
	test01();
	system("pause");
	return 0;
}

当你遇到 "无法解析外部符号 WinMain" 错误,并且提到 "int __cdecl invoke_main(void)" 这个函数引用了这个符号时,这通常意味着你在试图调用 `WinMain` 函数,但编译器找不到这个函数的定义。 `WinMain` 是 Windows 应用程序中的入口点,负责初始化应用程序并处理消息循环。如果你是在使用 C++ 编写 Windows 应用,你应该确保以下几个方面: 1. **包含头文件**:确保包含了 `<Windows.h>` 或相关的Windows API头文件,因为 `WinMain` 是标准库的一部分,通常会在这些头文件中声明。 ```cpp #include <windows.h> ``` 2. **链接正确**:如果你的项目是使用 Visual Studio 或 MinGW 等工具链构建的,可能需要选择正确的 Win32 库(如 `mfc`、`atl` 或 `user32.lib`)进行链接。在项目的配置中,检查链接器设置以确保包含了 `WinMain` 的支持库。 3. **主函数声明**:如果是在静态库或模块中使用 `WinMain`,确保有对应的函数声明,即使没有实际实现也可以帮助链接器知道它的存在。 ```cpp // 只是为了声明,不需要实现 extern "C" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); ``` 4. **避免混淆**:有时候,引入其他库或框架可能会冲突,导致 `WinMain` 的定义不可见。检查是否有重复的 WinMain 实现或第三方库干扰。 5. **异常处理**:如果你的代码中有 `__declspec(dllimport)` 宏用于导入函数,确保它们正确地导入了 `WinMain`。如果没有显式导入,`invoke_main` 也可能尝试导入这个函数,造成混乱。 6. **调试**:使用调试工具(如 Visual Studio 的断点或 GDB)定位错误的确切位置,有助于找出具体是哪个地方引用了未定义的 `WinMain`。 如果你已经确认上述所有步骤,但仍存在问题,可能需要查看编译器的具体输出信息,以便找出更精确的原因。另外,请提供更多的上下文信息,比如项目结构、使用的编译器版本等,以帮助找到解决方案。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值