无法在C++中访问类内的私有成员吗? 所以我试图教自己C++中的数据结构。为此,我创建了一个ArrayList类,其中包含一个类型为int*的成员变量arrayData和一个get方法来访问该指针中的值。我来自java后台,C++ OOP是奇怪的,特别是与头文件和源文件的分离。在编译时,我得到一个错误:“int*ArrayList::arrayData”不是“class ArrayList”的静态数据成员。我用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;
ArrayList.h:无法在C++中访问类内的私有成员吗? 所以我试图教自己C++中的数据结构。为此,我创建了一个ArrayList类,其中包含一个类型为int*的成员变量arrayData和一个get方法来访问该指针中的值。我来自java后台,C++ OOP是奇怪的,特别是与头文件和源文件的分离。在编译时,我得到一个错误:“int*ArrayList::arrayData”不是“class ArrayList”的静态数据成员。我用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;,c++,arraylist,C++,Arraylist,ArrayList.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的一
#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*ArrayList::arrayData
在源文件中没有任何意义。编译器认为您正在引用ArrayList的一个静态变量,因为您在前面加了类名。拆下这条线
您将能够从其他方法访问arrayData
另外,使用std::unique_ptr代替原始指针。然后,您的内存保证在使用后自动释放。这里有一些错误 首先,您的ArrayList.h include-guards不正确
#ifndef ARRAYLIST_H_
#define ARRAYLIST_H_
class ArrayList {
public:
ArrayList(int size);
~ArrayList();
int get(int index);
private:
int* arrayData;
};
#endif /* ARRAYLIST_H_ */
接下来,您的int-ArrayList::get声明和定义不一致。不需要int*ArrayList::arrayData;也在你的C++文件中。
#include "ArrayList.h"
ArrayList::ArrayList(int size) {
arrayData = new int[size];
}
ArrayList::~ArrayList() {
delete arrayData;
}
int ArrayList::get(int index) {
return arrayData[index];
}
这里有一些错误 首先,您的ArrayList.h include-guards不正确
#ifndef ARRAYLIST_H_
#define ARRAYLIST_H_
class ArrayList {
public:
ArrayList(int size);
~ArrayList();
int get(int index);
private:
int* arrayData;
};
#endif /* ARRAYLIST_H_ */
接下来,您的int-ArrayList::get声明和定义不一致。不需要int*ArrayList::arrayData;也在你的C++文件中。
#include "ArrayList.h"
ArrayList::ArrayList(int size) {
arrayData = new int[size];
}
ArrayList::~ArrayList() {
delete arrayData;
}
int ArrayList::get(int index) {
return arrayData[index];
}
那么,C++中的Valuabk声明只在头文件中存在吗?是的,除了静态变量,因此编译错误。class::variable语法用于类的静态变量,因为它们是静态的,无法通过对象的实例访问。好吧,当我修复了这一行并删除了getint的静态修饰符后尝试访问arrayData时,它说arrayData未在范围内声明。它不是对象范围吗?从哪里访问它?顺便说一句,您的头表示get返回一个int,但您的源实现表示int*。这些需要匹配。另外,让ARADYATA成为STD::它会让生活更容易。哦,那么C++中的Valuabk声明只在头文件中存在?是的,除了静态变量,因此编译错误。class::variable语法用于类的静态变量,因为它们是静态的,无法通过对象的实例访问。好吧,当我修复了这一行并删除了getint的静态修饰符后尝试访问arrayData时,它说arrayData未在范围内声明。它不是对象范围吗?从哪里访问它?顺便说一句,您的头表示get返回一个int,但您的源实现表示int*。这些需要匹配。另外,将arrayData设置为std::vector,这将使生活更轻松。