c++ - 无法从 C++ 中的类中访问私有成员?
问题描述
所以我正在尝试用 C++ 自学数据结构。为此,我创建了一个 ArrayList 类,其中包含一个 int* 类型的成员变量 arrayData 和一个从该指针访问值的 get 方法。我来自 Java 背景,C++ OOP 有点奇怪,尤其是头文件和源文件的分离。在编译时,我得到“错误:'int* ArrayList::arrayData' 不是 'class ArrayList' 的静态数据成员”。我用 ArrayList:: 标记它们以使它们成为 ArrayList 的成员,那么为什么不将它们标记为这样呢?如果您能指出如何访问我的变量的方向,非常感谢您。数组列表.cpp:
#include "ArrayList.h"
ArrayList::ArrayList(int size) {
arrayData = new int[size];
}
ArrayList::~ArrayList() {
delete arrayData;
}
int* ArrayList::get(int index) {
return (*(this.arrayData))[index];
}
int* ArrayList::arrayData;
数组列表.h:
#define ARRAYLIST_H_
class ArrayList {
public:
ArrayList(int size);
~ArrayList();
int get(int index);
private:
int* arrayData;
};
#endif /* ARRAYLIST_H_ */
解决方案
这一行:
int* ArrayList::arrayData;
在源文件中没有任何意义。编译器认为您正在引用 ArrayList 的静态变量(因为您已添加类名)。删除此行。
您将能够从其他方法访问 arrayData。
此外,使用std::unique_ptr<int>
而不是原始指针。那么你的内存保证在使用后会自动释放。
推荐阅读
- google-colaboratory - 将这些特定命令提供给 xargs 以并行运行
- python-3.x - 错误处理:语法错误除外
- python - The accuracy of basic Tensorflow model not increasing
- postgresql - 更新postgis扩展时在“支持”处或附近出现postgresql`语法错误
- bootstrap-4 - 为什么我的引导导航栏按钮没有在移动设备上显示导航项目?
- ios - 开发团队未填充 xcode
- node.js - Visual Studio 2019 上的线程加载器的 NodeJS 模块构建失败
- python - 完成问题后,菜单不记得 user_choice
- checkbox - 如何自动“取消选中”我的复选框?
- c# - 如何将列表项拖放到图像视图 (WPF)?