C++疑难杂症 error LNK2001: 无法解析的外部符号

  1. 问题简述
    error LNK2001: 无法解析的外部符号 “private: static int ETH::m_age” (?m_age@ETH@@0HA)
    这类问题是我们在编译过程很常见,原因我百度的时候发现也分好几种,有可能是没有包含相应的头文件,也有可能是没有包含库文件,不过还有一种原因比较刁钻,一般不轻易看得出来,就是在头文件中某个类里定义了一个静态成员变量,然后未在源文件对这个变量进行显示初始化。我本次遇到的情况就是这样的。

  2. 看码说话
    VirlualMoney.h

#pragma once
#include <iostream>

class ETH
	:public VirlualMoney
{
public:
	ETH(){ std::cout << "I am ETH!" << std::endl; }
	~ETH(){}
	static void SetETHAge(const int age)
	{
		m_age = age;
	}

private:
	static int m_age;	//定义一个静态成员变量
};

main.cpp

#include <iostream>
#include "VirlualMoney.h"

int main(int argc, char* argv[])
{
	ETH ethDemo;
	ethDemo.SetETHAge(20);
	return 0;
}

在这里插入图片描述

此时编译会报错,因为静态成员变量需要显示初始化才能使用,我们需要修改一下main.cpp

#include <iostream>
#include "VirlualMoney.h"

int ETH::m_age = 0;	//静态成员变量需要在源文件中显示初始化,在头文件中显示初始化会报错

int main(int argc, char* argv[])
{
	ETH ethDemo;
	ethDemo.SetETHAge(20);
	return 0;
}

ok,编译通过!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值