LNK1169 LNK2005错误

当我们在visual Studio 中编译时,经常会发生这两个错误,通常这两个错误是同时产生的。

产生原因

找到一个或多个多重定义的符号

生成因一个或多个符号的多个定义而失败。 该错误之前为错误 LNK2005。

通常情况下,是因为不正确的使用导致的 变量或者函数名重名

解决方案:

  1. 定位到错误的地点
    在LNK2005的错误的说明中可以找到
    错误 LNK2005 “private: static class GameMap * GameMap::ga_me” (?ga_me@GameMap@@0PEAV1@EA) 已经在 bigHomework.obj 中定义 Project1 …\Main.obj 1
  2. 删除部分代码,找到重定义所在
    因为一般情况下可能看不出来,所以尽量减少对应的变量名或者函数名,直到正确编译。

提供一个我遇到的情况:

class GameMap {
private:
	static GameMap* ga_me;
	char gamemap[21][21];

	GameMap() { memset(gamemap, 0, sizeof(gamemap)); }
	~GameMap() { if (ga_me != NULL)delete ga_me; }
public:
	static
		GameMap* getInstance() {
		if (ga_me == NULL) {
			ga_me = new GameMap();
		}
		return ga_me;
	}
};
GameMap* GameMap::ga_me = NULL;//去掉这句话就是正确的

错误说明:

当初始化类中的static变量是,必须在类外指定值。
在单例模式中初始化GameMap* GameMap::ga_me = NULL;时算是一次对变量名的定义
ga_me = new GameMap();也当做了一次对变量名的重新定义。
因此,就产生了这两个错误。

我的改正办法是:
直接删掉GameMap* GameMap::ga_me = NULL;
因为在指针没有显式初始化的情况下,默认的初始化为NULL,程序能够正确。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
报错c:\testoutput\inde.lnk是一个常见的错误提示信息,它通常与Windows操作系统的快捷方式(.lnk文件)有关。 这个错误提示通常表示指定的快捷方式文件(inde.lnk)在给定的路径(c:\testoutput)中无法找到或访问。 造成该错误的原因可能有多种,包括以下几种情况: 1. 丢失的文件:指定路径中的inde.lnk文件可能已经被错误地删除或移动到其他位置,这样在系统尝试访问它时就会报错。 2. 路径错误:路径(c:\testoutput)可能存在错误的拼写或者格式问题,导致系统无法正确地找到要访问的快捷方式文件。 3. 权限问题:当前登录用户可能没有足够的权限来访问指定路径中的文件,这样就会导致访问报错。 解决这个问题的方法有以下几种: 1. 检查文件位置:首先确认inde.lnk文件是否实际存在于指定路径中,可以通过在资源管理器中手动导航到该路径来进行确认。如果文件不存在,可以尝试从回收站或备份中恢复文件,或者重新创建一个新的快捷方式。 2. 修复路径:检查路径是否存在任何错误,确保路径名正确无误,并且没有拼写错误。如果发现问题,可以手动更正路径名。 3. 检查权限:确保当前登录的用户具有足够的权限来访问指定路径中的文件。可以右键点击路径文件夹,选择“属性”,然后在“安全”选项卡中设置适当的权限。 总之,解决报错c:\testoutput\inde.lnk问题通常涉及到确认文件位置、修复路径错误和检查权限的步骤。根据具体情况采取相应的措施能够帮助用户解决这个问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值