静态成员函数操作静态成员时的undefined reference to问题

本文详细介绍了C++编程中静态成员变量的使用,包括如何初始化静态成员变量以及在类的成员函数中操作静态成员时需要注意的问题。通过一个具体的示例展示了在未初始化静态成员变量时可能导致的链接错误,并提供了解决方案。
摘要由CSDN通过智能技术生成

在使用静态成员函数操作静态成员时需要现将静态成员初始化,否则会出现该问题。

#include"iostream"
#include"string.h"
using namespace std;
class Stu;
class Teac
{
	Stu *s;
public:
	Teac(int n);
	void assign(int n);
	void show(int n);
	
};
class Stu
{
	int Daily_Score;
	int Exam_Grade;
	static float Prop;
public:
	Stu(int d=0,int e=0)
	{
		Daily_Score = d;
		Exam_Grade = e;
		//Prop = p;
	}
	Stu(const Stu &s)
	{
		Exam_Grade = s.Exam_Grade;
		Daily_Score = s.Daily_Score;
		//Prop = s.Prop;
	}
	friend void Teac::assign(int n);
	static void setProp(float p) { Prop = p; }
	float compScore()
	{
		return (Prop * Daily_Score + (1 - Prop) * Exam_Grade);
	}
};
Teac::Teac(int n)
{
	s = new Stu;
}
// void Stu::setProp(float p)//注意静态函数没有this指针,若类外定义则不加static修饰符
// {
// 	Prop = p;
// }
void Teac::assign(int n)//这一条语句一定要在friend之后,否则还是不能访问
{
	cin >> s[n].Daily_Score >> s[n].Exam_Grade;
}
void Teac::show(int n)
{
	cout << s[n].compScore();
}
//float Stu::Prop = 0;//通过静态函数操作静态数据成员之前一定要现初始化静态成员
int main()
{
	float p;
	cin >> p;
	Stu::setProp(p);
	int n;
	cin >> n;
	Teac t(n);
	for (int i = 0; i < n;i++)
		t.assign(i);
	for (int i = 0; i < n;i++)
	{	
		t.show(i);
		cout << ' ';
	}
	return 0;
}

55行处的静态成员没有分配存储空间,因此会报错
undefined reference to `Stu::Prop’
collect2.exe: error: ld returned 1 exit status
解决办法:取消55行处注释。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值