Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在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 - Fatal编程技术网

无法在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++中访问类内的私有成员吗? 所以我试图教自己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的一

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的一个静态变量,因为您在前面加了类名。拆下这条线

您将能够从其他方法访问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,这将使生活更轻松。