問題は、下の例のstruct MegaTable
というデータテーブルを作成することです(下の例のstruct DataItem
)。ここでポインタを使って構造体要素にアクセスするには?
は私のコードです:
MSVSから#include <vector>
struct MegaDataItem;
struct DataItem
{
int a_;
char* ch_;
MegaDataItem* ptr_;
DataItem(int _a, char* _ch, MegaDataItem* ptr)
: a_(_a)
, ch_(_ch)
, ptr_(ptr)
{}
};
typedef std::vector<DataItem> DataTable;
struct MegaDataItem
{
int b_;
DataTable data_;
MegaDataItem(int _b)
: b_(_b)
{
for (int j = 15; j >= 10; j--)
{
DataItem item(j, "", this);
data_.push_back(item);
}
}
};
typedef std::vector<MegaDataItem> MegaTable;
int main(int argc, char** argv)
{
MegaTable table;
for (int i = 0; i < 5; i++)
{
MegaDataItem megaItem(i);
table.push_back(megaItem);
}
return 0;
}
とデバッグスナップショット:
あなたが見ることができるように、ptr_
ポインタがどこでも0x0031fcccに等しいが、それは正しくありません。 !ポインタは正しいstruct MegaDataItem
データで構成されている必要があります。struct DataItem
のすべてが存在します。
ありがとうございました!
PS。私はこれが難しい質問ではないことを知っていますが、私はそれを手に入れることはできません。
UPDATE(修正液): PS:thnksはjpalecekします! :)
MegaDataItem(const MegaDataItem& other)
: b_(other.b_)
{
data_.clear();
DataTable::const_iterator d_i(other.data_.begin()), d_e(other.data_.end());
for (; d_i != d_e; ++d_i)
data_.push_back(DataItem((*d_i).a_, (*d_i).ch_, this));
}
void operator=(const MegaDataItem& other)
{
b_ = other.b_;
data_.clear();
DataTable::const_iterator d_i(other.data_.begin()), d_e(other.data_.end());
for (; d_i != d_e; ++d_i)
data_.push_back(DataItem((*d_i).a_, (*d_i).ch_, this));
}
返信用にThnks!そしてこれを行う方法?つまり、私はコピーコンストラクタと演算子を実装しなければならないことを知っていますが、どうですか? – mosg
編集を参照してください。これは単なる例であり、他の方法で実装できることに注意してください。 – jpalecek
ありがとう、それは動作します! :) – mosg