JustShinigami
Mitglied
Hallo liebe Community.
Ich bin etwas neu in C++, und kenne auch vieles nur aus C++/CLI.
Aus C++/CLI bin ich auch das verwenden von Properties gewohnt.
Nun, da ich schon ein wenig mit templates (Oder in C++/CLI halt generic) gearbeitet habe, dachte ich, warum schreib ich nicht einfach eine Klasse dafür.
An sich scheint alles richtig zu sein, keine Compilerfehler, Anwendung lässt sich normal starten, aber mein Programm schmiert beim debuggen immer ab mit folgender Fehlermeldung:
Folglich alle Hintergrundinformationen:
IDE: CodeLite
Code:
main.cpp
Property.hpp:
Property.tpp:
Per Google habe ich herausgefunden, dass es irgendwas mit Speicherzugriff zu tun hat. Allerdings habe ich keine Ahnung, wie ich es beheben kann.
PS: Bitte stellt den Sinn dieser Klasse nicht in Frage, ich benötige sie nur übergangsweise zum Lernen von purem C/C++ und brauchte etwas zum anfangen. Diese Klasse hat also einen Lernfaktor im Fokus, anstatt eines wirklichen Sinnes.
Gruß, JustShinigami
Ich bin etwas neu in C++, und kenne auch vieles nur aus C++/CLI.
Aus C++/CLI bin ich auch das verwenden von Properties gewohnt.
Nun, da ich schon ein wenig mit templates (Oder in C++/CLI halt generic) gearbeitet habe, dachte ich, warum schreib ich nicht einfach eine Klasse dafür.
An sich scheint alles richtig zu sein, keine Compilerfehler, Anwendung lässt sich normal starten, aber mein Programm schmiert beim debuggen immer ab mit folgender Fehlermeldung:
Code:
Program Received signal SIGSEGV
Stack Trace is available in the "Call Stack" tab
Folglich alle Hintergrundinformationen:
IDE: CodeLite
Code:
main.cpp
C++:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include "Property.hpp"
using namespace std;
int main(int argc, char **argv)
{
int EinInt = 0;
Property<int> EinIntProperty(&EinInt);
EinIntProperty = 15; /* <= In dieser Zeile wird die Set Funktion aufgerufen (siehe unten, Properties.tpp) */
int EinWeiteresInt = EinIntProperty;
printf("%d", EinWeiteresInt);
return 0;
};
C++:
#ifndef PROPERTY_H
#define PROPERTY_H
template <class ValueType>
class Property
{
private:
ValueType* _value;
Property(){*_value = 0;};
public:
Property(ValueType* Target);
Property(ValueType Value);
ValueType Get();
void Set(ValueType Value);
operator ValueType();
};
#include "Property.tpp"
#endif
C++:
template<class ValueType>
Property<ValueType>::Property(ValueType* Target)
{
_value = Target;
};
template<class ValueType>
Property<ValueType>::Property(ValueType Value)
{
Set(Value);
};
template<class ValueType>
ValueType Property<ValueType>::Get()
{
return *_value;
};
template<class ValueType>
void Property<ValueType>::Set(ValueType Value)
{
*_value = Value; /* <= Hier tritt der Fehler auf! */
};
template<class ValueType>
Property<ValueType>::operator ValueType()
{
return Get();
};
Per Google habe ich herausgefunden, dass es irgendwas mit Speicherzugriff zu tun hat. Allerdings habe ich keine Ahnung, wie ich es beheben kann.
PS: Bitte stellt den Sinn dieser Klasse nicht in Frage, ich benötige sie nur übergangsweise zum Lernen von purem C/C++ und brauchte etwas zum anfangen. Diese Klasse hat also einen Lernfaktor im Fokus, anstatt eines wirklichen Sinnes.
Gruß, JustShinigami