2

私はこのコードを持っています:

WItem.h

#include <vector>
#include <string>

typedef struct iteminfo {
int rowid;
   char* item;
   int type;
   int extra;
   int objectid;
} item;


class CItem {
 public:
    void push(int rowid, char* item, int type, int extra, int objectid);
    std::vector<iteminfo> data;
};

WItem.cpp

#include "witem.h"

void CItem::push(int rowid, char* item, int type, int extra, int objectid) {
   iteminfo* temp = new iteminfo;
   temp->rowid = rowid;
   temp->item = item;
   temp->type = type;
   temp->extra = extra;
   temp->objectid = objectid;

   this.data.push_back(temp);
}

そして、私はこれらのエラーを受け取ります:

  • 「データ」はタイプではありません
  • '.' の前に非集計型のメンバーを要求します。トークン

そして、何が悪いのかわかりません。

4

3 に答える 3

5
  1. this.dataは間違っています。justdataまたはthis->data

  2. dataのベクトルでiteminfoあり、tempつまりiteminfo *ポインタです。ここで使用する必要はありませんnew。「スタック上に」アイテムを作成し、使用push_backしてそのコピーをベクターに挿入する必要があります。

  3. これは C ではない可能性が高いため、typedef は必要ありませんがstd::string、文字列には not を使用する必要がありますchar *。これらのポインターを維持するために、多くの混乱に陥ることになります。

  4. item型とメンバーの両方として使用しないことをお勧めします。合法ですが、コードが混乱します。

  5. 理想的にはdata、のプライベートメンバーを作成しCItemます(ちなみに、クラス名を使用していて、itemここCItemで問題を再現するだけでも問題ありませんが、実際のコードではクラス名が貧弱なので、よりわかりやすいものを選択してください)。

于 2013-01-07T13:28:15.650 に答える
4

this.dataはC++ のポインターであるthis->dataため、 である必要があります。this

于 2013-01-07T13:19:04.030 に答える
0

CashCow はエラーを適切に分析しました。さらに私は指摘したい

  • push は type を取る必要がiteminfoあります。パラメータ リストが乱雑です

  • iteminfoコンストラクタが必要です

    iteminfo(int rowid, char* item, int type, int extra, int objectid);

    また、グローバルな悪用からメンバーを保護するために、メンバーを非公開にすることも検討してください

コード例が完成したら、クラスが廃止され、 (または typedef)CItemに置き換えられる可能性があることを認識します。std::vector<iteminfo>

于 2013-01-07T14:54:03.723 に答える