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.