C ++ in G ++ - Segmentierungsfehler, wenn keine Zeiger verwendet werden

Ich versuche, mit G ++ C ++ - Code zu kompilieren. Es scheint in anderen Compilern gut zu funktionieren, aber aus irgendeinem Grund wird G ++ keine funktionierende Ausgabe produzieren.

Disclosure: Dies ist Teil einer Hausaufgabe, aber ich glaube, es ist eher ein Compiler-Problem, da es in anderen Compilern funktioniert.

Hier ist der Ausschnitt, der Chaos anrichtet:

set<int> t1, t2;

Es ist seltsam, weil der folgende Code gut funktioniert:

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

Granted, ich muss @ verwend-> Anstatt von., aber das wird erwartet. Das erste Snippet erzeugt zur Laufzeit einen Segmentierungsfehler. Der zweite macht intuitiv, was ich erwarten würde.

Anyhow, hinter den Kulissen, die.cpp zumset hat dies:

#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) {}

Das.h sieht aus wie das

#include "bag.h"

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

// ...

};
#include "set.cpp"

Und last but not least, dasbag.cpp undbag.h -Dateien sehen folgendermaßen aus:

using namespace std;

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

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

    // ...

}

undbag.h:

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

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

Again, ich habe das Gefühl, dass G ++ mich einfach hasst, aber andererseits könnte ich etwas Dummes tun. Ein einfacher Schubs in die richtige Richtung wäre großartig.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage