C++实现头文件声明的类成员函数时无法访问私有变量如何解决
问题原因
你在dateclasses.cpp中定义的DisplayStandard是全局作用域下的独立函数,没有和dateclass类绑定,自然没有权限访问类的私有成员变量month、day、year。
修正方法
实现类的成员函数时,需要在函数名前增加类名::前缀,明确该函数所属的类作用域,修正后的dateclasses.cpp代码如下:
#include "dateclass.h" #include <iostream> // 增加dateclass::前缀,标识这是dateclass类的成员函数 void dateclass::DisplayStandard() { std::cout << "Date: " << month << "/" << day << "/" << year << std::endl; }
补充优化建议
- 尽量避免在全局作用域写
using namespace std;,避免命名冲突,直接使用std::前缀调用标准库方法更安全 - 如果你后续需要在非成员函数中访问类的私有成员,可以将对应函数声明为类的友元,但当前场景是成员函数实现错误,不需要用到友元特性
内容的提问来源于stack exchange,提问作者Jackson
相关产品推荐
相关产品推荐

