MrK*_*ish 2 c++ arrays oop pointers return
我是一名初学程序员,我在使用C++ OOP方面遇到了很多麻烦.具体来说,今晚我正在尝试编写一个简单的类,它接收事件并在多个图像之间切换,并指向存储在数组中的每个图像.在尝试创建一个返回指向数组本身的指针的"getter"函数时遇到了一个令人困惑的问题.
基本上,我试图做这样的事情:
class SlideShow
{
public:
image *getSlideArray();
private:
image *slideArray[10];
};
Run Code Online (Sandbox Code Playgroud)
所以,我想要一个存储指向每个图像的指针的数组.我还想要一个返回数组本身地址的函数.我在尝试定义getSlideArray()函数时遇到了一个问题...我只是不完全确定它为什么不能正常工作......
这是我最初尝试的,在我的课程'源文件中:
image *SlideShow::getSlideArray()
{
return this->slideArray;
}
Run Code Online (Sandbox Code Playgroud)
在这种尝试中,编译器一直在使用'this'关键字引发问题,说我试图返回的不是之前指定的类型.然而,这是我迄今为止编写getter函数的方式,它通常在使用简单变量时起作用......我怀疑这里存在一些问题,因为'this'是一个指针,'slideArray'是一个指向一个数组的指针,该数组也包含指针......但是我很可怕,现在这种引用的程度超出了我的想象.我花了一段时间才收集对指针的基本理解,使用地址和操作符等引用.指针和指针数组的指针更令人困惑.
我还要提一下,我找到了一个解决方法,我的代码编译.(虽然我不能真正运行它来检查它是否在运行时工作..)我的工作涉及将定义/返回语句添加到类声明本身(在头文件中):
class SlideShow
{
public:
image *getSlideArray() {return *slideArray;);
private:
image *slideArray[10];
};
Run Code Online (Sandbox Code Playgroud)
现在.这编译正确......但是,这也让我感到困惑.我知道通常,当你返回一个数组(比如一个int数组)时,你将返回数组的第0个插槽的地址.但是如果我试图返回一个intArray [5],当它返回时,我会简单地写'intArray',对吗?基本上,我并不感到困惑,为什么我必须在'slideArray'之前添加*在这种情况下......
所以无论我尝试做哪种方式,都让我感到困惑.我知道这里有一些'技巧',它可能与返回指针指针或指针的指针有关,但我只是无法自己解决.我真的希望学习这门课程,这样我才能开始掌握编程,尤其是OOP ......
谁能帮助我更好地理解这一点?
您正在使用的方法定义:
image *SlideShow::getSlideArray() {
return this->slideArray;
}
Run Code Online (Sandbox Code Playgroud)
声明image正在返回指向an的指针.但是,您正在尝试返回一个数组image.你应该这样做:
image *SlideShow::getSlideArray(int image_idx) {
return this->slideArray[image_idx];
}
Run Code Online (Sandbox Code Playgroud)
要么
image **SlideShow::getSlideArray() {
return this->slideArray;
}
Run Code Online (Sandbox Code Playgroud)
取决于您是要将所有图像一起返回(第二个选项)还是逐个返回(第一个选项).
顺便说一句,你根本不需要使用this.下一个代码相当于上面的第二个选项:
image **SlideShow::getSlideArray() {
return slideArray;
}
Run Code Online (Sandbox Code Playgroud)
之前的解释应该可以解决您的问题.但是,不要使用"原始指针"和C风格的数组,最好使用STL容器(请参阅@juanchopanza的答案).
| 归档时间: |
|
| 查看次数: |
9217 次 |
| 最近记录: |