[英]c++: class containing object of itself, initialisation
我嘗試刷新我的(非常有限的)C ++知識,並嘗試實現合並搜索方法:
class Sorter
{
protected:
vector<int> v;
public:
Sorter(){};
Sorter(vector<int> input_vector);
virtual void sort() = 0;
};
Sorter::Sorter(vector<int> input_vector)
{
v.assign(input_vector.begin(), input_vector.end());
}
class MergeSorter : public Sorter
{
public:
MergeSorter():Sorter(){};
MergeSorter(vector<int> input_vector):Sorter(input_vector){};
vector<int> sorted_v;
MergeSorter* left;
MergeSorter* right;
void merge();
void sort();
};
void MergeSorter::sort()
{
if(v.size() <= 1)
return;
int mid = int(v.size() / 2);
left->v.assign(v.begin(), v.begin() + mid);
right->v.assign(v.begin() + mid, v.end() + 1);
left->sort();
right->sort();
left->v.assign(left->sorted_v.begin(), left->sorted_v.end());
right->v.assign(right->sorted_v.begin(), right->sorted_v.end());
merge();
return;
}
...
它確實可以編譯,但是當我嘗試將某些內容分配給left->v
時,程序崩潰並顯示“訪問沖突讀取位置”。 我覺得我實際上需要先創建一個對象,然后再left
(和right
)創建對象,但是我不知道該在哪里做,因為它是同一類的對象。
我覺得我需要首先實際創建一個對象,但是不知道該在哪里做,因為它是同一類的對象。
這是對的。 在創建它們之前,它們無法被“初始化”,因此無法“使用”。 您應該能夠在構造函數中進行left和right的構造和分配,或者在構造函數中將它們初始化為NULL,如果在那時未設置它們,則在首次使用之前將其設置。
請注意,您將需要小心,不要以導致無限循環的方式構造它們-在構造函數中創建一個新實例,這反過來又會創建一個新實例,這又會導致...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.