私は初心者のプログラマーであり、C++OOPでかなりの問題を抱えています。具体的には、今夜、配列に格納されている各画像へのポインタを使用して、イベントを取り込み、複数の画像を切り替える簡単なクラスを作成しようとしていました。配列自体へのポインタを返す「getter」関数を作成しようとすると、紛らわしい問題が発生しました。
基本的に、私は次のようなことをしようとしていました:
class SlideShow
{
public:
image *getSlideArray();
private:
image *slideArray[10];
};
そこで、各画像へのポインタを格納する配列が必要でした。また、配列自体のアドレスを返す関数も必要でした。getSlideArray()関数を定義しようとしたときに問題が発生しました...なぜそれが機能しなかったのか完全にはわかりません...
クラスのソースファイルで最初に試したことは次のとおりです。
image *SlideShow::getSlideArray()
{
return this->slideArray;
}
この試みでは、コンパイラーは「this」キーワードの使用に関して問題を提起し続け、私が返そうとしたものは以前に指定されたタイプではないと言っていました。しかし、これは私がこれまでゲッター関数を書いてきた方法であり、単純な変数を使用するときに一般的に機能します...私の疑いは、「これ」がポインターであるという事実のためにここに問題があることです、および'slideArray'は、ポインターも含む配列へのポインターです...しかし、私はひどいので、そのレベルの参照は今のところ頭を超えています。ポインターの基本的な理解、アドレスと演算子を使用した参照などを収集するのにしばらく時間がかかりました。ポインターへのポインターとポインターの配列はさらに混乱します。
また、コードをコンパイルする1つの回避策を見つけたことにも言及する必要があります。(実行時に動作するかどうかを確認するために実際に実行することはできませんが。)私の回避策は、定義/ returnステートメントをクラス宣言自体(ヘッダーファイル内)に追加することでした。
class SlideShow
{
public:
image *getSlideArray() {return *slideArray;);
private:
image *slideArray[10];
};
今。これは正しくコンパイルされました...しかし、それは私にも混乱を招きます。一般に、配列(たとえば、intの配列)を返すときは、配列の0番目のスロットのアドレスを返すことを知っています。しかし、intArray [5]を返そうとした場合、それを返すときは、単に「intArray」と記述しますよね?基本的に、この状況で「slideArray」の前に*を追加する必要がある理由については混乱していません...
ですから、私がどちらの方法でそれをやろうとしても、それは私を混乱させます。ここにいくつかの「トリック」があり、それはおそらくポインターをポインターに戻すことと関係があることを私は知っていますが、私はそれを自分で解決することができませんでした。プログラミング、特にOOPを理解し始めることができるように、私は本当にこの主題を学びたいと思っています...
誰かが私がこれをよりよく理解するのを手伝ってくれる?