0

わかりました。構造体の配列(構造体へのポインタの配列ではありません)があります。-lesson-も、内部にいくつかのプロパティを持つクラスです。

struct Mystruct{
    lesson* data;
    mystruct* next;
};    

class Myclass{
    public:
        Myclass();
        Mystruct getarray();
    private:
        Mystruct* array;
};
//in the myclass(); constructor I am doing;
Myclass* array = new Myclass[8];

私はそれを知る必要があります

array[i].next

空であるかどうかは、構造体へのポインタの配列ではないため、次のように言うことはできません。

if(array[i] == NULL)

また

if(&(array[i]) == NULL)

どうすればそれができますか。私が探している答えは、「これは、ポインタである場合、このチェックを実行できない構造体の配列です。...blabla」ではありません。私が方法を見つけるのを手伝ってください、すべての答えとアプローチは非常にありがたいです。

* *編集:あなたのためにそれを明確にさせてください、私はそれをチェックする必要があります;

array[i].next = new lesson(//parameters);

このアクションが実行されたかどうか、配列[i]番目の要素の「次の」オブジェクトが初期化されているかどうかを知る必要があります。(配列の[i]番目の要素はリンクリストを保持しています。リストを検索してオブジェクトを追加しています。リストの先頭が空でない場合は、それを把握してオブジェクトを最後に追加する方法を見つける必要があります。リンクリスト)

どうすればもっと明確にできますが、誰かが助けようとするのではなく、嫌いなボタンをクリックするだけです。これは荒らしではなく深刻な質問です。私はできるだけ明確にしようとしていますが、皆さんは助けていません。クリックして離れると、もっと何が言えますか...:/

私はあなたが状況を想像するためにもっとコードを追加しました。

4

2 に答える 2

2

空かどうか、

「空」を定義します。初期化されていないということですか?その場合は、各要素をデフォルト値に初期化してください。nullptr(C++11)へのポインターを初期化するか0、使用する前にチェックします。オブジェクトが「空」であることは意味がありません。

MyClassまた、クラスではないことに注意してください。ともかく...

デフォルトのコンストラクターだけを使用している場合、その点は何ですか? このメモリを割り当てると、デフォルトで構築されたオブジェクトでいっぱいになるので...

struct Mystruct
{
    Mystruct()
      : data(nullptr), next(nullptr) {}

    lesson* data;
    myclass* next;
}; 

これで、ポインターを適切に初期化し、xnullyにすることができます。


あなたの編集ごとに...

編集:あなたのためにそれを明確にさせてください、私はそれを確認する必要があります;

array[i].next = 新しいレッスン(//パラメータ); このアクションが完了したかどうか、配列の [i] 番目の要素の「次の」オブジェクトが初期化されているかどうかを知る必要があります。

そうです、メンバー変数を適切に初期化したからです...

if(!array[i].next)
    // next is null, initialize it
于 2012-11-01T22:56:51.767 に答える
0

ご質問の Mystruct と Myclass は同じ型だと思います。

empty() メンバー関数を構造体に追加して呼び出すだけです。

struct Mystruct{
    lesson* data;
    myclass* next;
    bool empty() const { return next == 0; }
};    

Myclass* array = new Myclass[8](); // extra () to make this array zeroed
//... some code
if (array[2].empty()) { ....; }

または、グローバル関数 empty() を追加します。

struct Mystruct{
    lesson* data;
    myclass* next;
};    
bool empty(const Mystruct& o) const { return o.next == 0; }

Myclass* array = new Myclass[8](); // extra () to make this array zeroed
//... some code
if (empty(array[2])) { ....; }

または、この次のメンバーを手で確認してください。

struct Mystruct{
    lesson* data;
    myclass* next;
};    

Myclass* array = new Myclass[8](); // extra () to make this array zeroed
//... some code
if (array[2].next == 0) { ....; }

ところで、ポインターを 0 と比較する代わりに、nullptr と比較します (コンパイラーのみが nullptr をサポートしている場合)。

于 2012-11-01T23:24:14.910 に答える