biowep
17-11-2014, 12:05
Salve, ho un programma composto da varie classi con un main semplice che stampa solo una stringa e nient'altro. Quando lo faccio partire, il programma crasha direttamente per cui il main non viene eseguito neanche. Ho ridotto il problema ad una classe che estende una classe ed un template per ridurre un po il codice.
//Binary.hpp
#include <string>
#include "OperatorCore.hpp"
#include "StaticPool.hpp"
class Binary final : public OperatorCore, public StaticPool<Binary> {
public:
Binary(int ID, std::string name)
: OperatorCore(name), StaticPool<Binary>(ID) {
}
~Binary() {}
};
//Binary.cpp
template<>
const Binary StaticPool<Binary>::pool[] = {
Binary(0, "+")//togliendo questa riga funziona
};
//OperatorCore
#include <string>
#include <map>
class OperatorCore {
public:
static std::map<std::string, OperatorCore*> symbolMap;
const std::string name;
OperatorCore(std::string name) : name(name) {
symbolMap.insert({name, this});//togliendo questa riga funziona
}
virtual ~OperatorCore() {}
};
//StaticPool
template<typename T, typename TKey = int>
class StaticPool {
public:
const TKey ID;
static const T pool[];
StaticPool(TKey ID) : ID(ID) {}
virtual ~StaticPool() {}
};
Il problema potrebbe per caso essere che Binary eredita da StaticPool<Binary> che è incompleto finché non definisco l'array? Ma non dovrebbe essere incompleto dal momento che l'array è dichiarato static.
Ho usato i tag del codice PHP per colorare la sintassi.
//Binary.hpp
#include <string>
#include "OperatorCore.hpp"
#include "StaticPool.hpp"
class Binary final : public OperatorCore, public StaticPool<Binary> {
public:
Binary(int ID, std::string name)
: OperatorCore(name), StaticPool<Binary>(ID) {
}
~Binary() {}
};
//Binary.cpp
template<>
const Binary StaticPool<Binary>::pool[] = {
Binary(0, "+")//togliendo questa riga funziona
};
//OperatorCore
#include <string>
#include <map>
class OperatorCore {
public:
static std::map<std::string, OperatorCore*> symbolMap;
const std::string name;
OperatorCore(std::string name) : name(name) {
symbolMap.insert({name, this});//togliendo questa riga funziona
}
virtual ~OperatorCore() {}
};
//StaticPool
template<typename T, typename TKey = int>
class StaticPool {
public:
const TKey ID;
static const T pool[];
StaticPool(TKey ID) : ID(ID) {}
virtual ~StaticPool() {}
};
Il problema potrebbe per caso essere che Binary eredita da StaticPool<Binary> che è incompleto finché non definisco l'array? Ma non dovrebbe essere incompleto dal momento che l'array è dichiarato static.
Ho usato i tag del codice PHP per colorare la sintassi.