Проблема заключается в создании таблицы данных std::vector
(struct MegaTable
, из приведенного ниже примера), в которой элементы (struct DataItem
, из примера ниже) могут иметь указатель на весь массив данных.
Вот мой код:
#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;
}
И отладочный снимок из MSVS:
![enter image description here](https://i.stack.imgur.com/7tgLE.png)
Как видите, указатель ptr_
везде равен 0x0031fccc , но это не правильно!Указатель должен состоять из правильных struct MegaDataItem
данных, где все struct DataItem
существуют ...
Спасибо за помощь!
PS.Я знаю, что это не сложный вопрос, но я не могу понять, как заставить все это работать!
ОБНОВЛЕНИЕ (исправленное решение): PS: спасибо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 ) );
}