首页 > 解决方案 > 无法从 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_ */

标签: c++arraylist

解决方案


这一行:

int* ArrayList::arrayData;

在源文件中没有任何意义。编译器认为您正在引用 ArrayList 的静态变量(因为您已添加类名)。删除此行。

您将能够从其他方法访问 arrayData。

此外,使用std::unique_ptr<int>而不是原始指针。那么你的内存保证在使用后会自动释放。


推荐阅读