C ++ в G ++ - ошибка сегментации, когда не используются указатели

Я пытаюсь использовать G ++ для компиляции кода C ++. Кажется, что он отлично работает в других компиляторах, но по какой-то причине G ++ не даст работающего вывода.

Раскрытие информации: Это часть домашнего задания, но я чувствую, что это скорее проблема компилятора, так как он работает в других компиляторах.

Вот фрагмент кода, который сеет хаос:

set<int> t1, t2;

Это странно, потому что следующий код работает просто отлично:

set<int> *t1 = new set<int>();
set<int> *t2 = new set<int>();

Конечно, я должен использовать-> вместо., но это ожидается. Первый фрагмент кода вызывает ошибку сегментации во время выполнения. Второй интуитивно делает то, что я ожидал.

Во всяком случае, за кадром,.cpp заset имеет это:

#include <cstdlib>
#include <iostream>

using namespace std;

template <class T>
set<T>::set() : bag<T>() {}

template <class T>
set<T>::set(const set<T>& b) : bag<T>(b) {}

.h выглядит так:

#include "bag.h"

template <class T>
class set : public bag<T>
{ 
    public:
        set( );
        set(const set &b);

// ...

};
#include "set.cpp"

И последнее, но не менее важное,bag.cpp а такжеbag.h файлы выглядят так:

using namespace std;

template <class T>
bag<T>::bag() {
    head = NULL;
}

template <class T>
bag<T>::bag(const bag<T>& b) {

    // ...

}

а такжеbag.h:

template <class T>
class bag
{ 
    public:
        bag( );
        bag(const bag &b);

    // ...
};
#include "bag.cpp"

Опять же, я чувствую, что G ++ просто ненавидит меня, но, опять же, я могу делать что-то глупое. Было бы просто просто толкнуть в правильном направлении.

Ответы на вопрос(1)

Ваш ответ на вопрос