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 ++ просто ненавидит меня, но, опять же, я могу делать что-то глупое. Было бы просто просто толкнуть в правильном направлении.