簡體   English   中英

c ++:包含自身對象的類,初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM