Ich versuche momentan in einer Struct den datentyp map zu speichern, aber sobald ich es in der struct in der headerdatei mit reinpacke stirbt das Programm beim start.
sieht ca so aus
Code:
struct EventGift
{
DWORD dwID;
int nCount;
int nPercentage;
};
struct EventMonster
{
DWORD dwID;
int nInerval;
int nPercentage;
map<DWORD,EventGift> m_aEventGift;
};
class AutoEvent
{
public:
map<DWORD, EventMonster> m_aEventMonster;
AutoEvent();
~AutoEvent();
void ReadInc();
void Process();
};
kommentiere ich map<DWORD,EventGIft> m_aEventGift; aus stürzt es nicht mehr ab, nur kann ich so nicht meine werte speichern.
Das ist nicht der für den Absturz relevante Teil. Mit dem Debugger wirst du den Fehler sicher besser eingrenzen können. Wenn es nicht zu viel ist, kannst du auch den gesamten Quelltext zur Fehlersuche bereitstellen.
Wozu brauchst du eigentlich std::map? Reicht std::vector nicht aus?
Ich weiß nicht, ob das der Fehler ist oder nur beim Einfügen in deinen Beitrag passiert ist, aber in der Klasse AutoEvent wird m_aEventMonster nicht richtig deklariert, also die Typen für das Tenplate sind nicht in den <>-Klammern.
Du hast anscheiennd ein , mit einem > verwechselt.
ja in der Source ist es richtig, war gerade nur so schnell freihand getippt.
Ich habe map anstatt vector gewählt, da die ID's nicht von 1-10 z.b. gehen, sondern z.b. 22, 105, 160
so kann ich besser auf den einzelnen Datensatz zugreifen.
Quote:
Originally Posted by Tasiro
Das ist nicht der für den Absturz relevante Teil. Mit dem Debugger wirst du den Fehler sicher besser eingrenzen können. Wenn es nicht zu viel ist, kannst du auch den gesamten Quelltext zur Fehlersuche bereitstellen.
Wozu brauchst du eigentlich std::map? Reicht std::vector nicht aus?
Debugger sagt einfach Programm beendet mit Code -5
sobald ich aber diesen teil in der Header auskommentiere läuft alles.
Also MUSS es daran liegen, da ich es in der CPP noch garnicht behandele
Da haben wir es doch. Was fällt dir ein, das einfach zu 0en?
std::map hat einen Standardkonstruktur, das Objekt ist nie uninitialisiert - das ist der Vorteil von objektorientierter Programmierung. Du hast doch selbst einen Standardkonstruktor für EventMonster definiert, also wozu diese Zeile?
Durch das 0en des Speichers beschädigst du evtl. den internen Zustand (ich weiß nichts Genaueres über die Implementation von map).
Btw. ist dir bewusst, wofür das Präfix "p" normalerweise verwendet wird? Deine EventMonster Variable ist kein Zeiger, also wozu das p?
Mal machste ein Struct mit typedef, mal ohne. Du definierst den vermeintlichen Klassenmember (m_aEventMonster) einfach mal global und definierst ihn lokal neu innerhalb der Klasse. Sicher, dass das nicht das Ergebnis von c&p ist?
Du solltest deine Projekteinstellungen ändern. Entweder C/C++ - Vorkompilierte Header - Vorkompilierte Header nicht verwenden oder C/C++ - Erweitert - Erzwungene Includedateien auf stdafx.h setzen.
In der stdafx.h sollten nur Headerdateien inkludiert werden, die sich nicht ändern werden, generell sollte diese Datei möglichst nicht ohne Grund genutzt werden, da durch deren Verwendung die Kompilierzeit unnötig steigen kann: alle Dateien müssen erneut übersetzt werden, wenn du in einer in stdafx.h inkludierten Datei etwas änderst.
Du brauchst virtuelle Destruktoren nur bei virtuellen Methoden (Variablen sollten ein Implementierungsdetail sein). Und wenn der Destruktor als einziges virtuell ist, gibt es keinen Grund, Zeiger oder Referenzen auf CAutoEvents zu erstellen, welche tatsächlich Objekte abgeleiteter Klassen beinhalten. Damit ist ein virtueller Destruktor nicht notwendig.
Code:
CAutoEvent g_AutoEvent;
Du verwendest globale Objekte. Warum?
Code:
#ifdef __AUTO_EVENT
__AUTO_EVENT ist ein für den Compiler reservierter Bezeichner, genau wie jeder andere Bezeichner mit zwei Unterstrichen oder einem führenden Unterstrich und einem darauf folgenden Großbuchstaben, oder einem Bezeichner mit einem führendem Unterstrich im globalen Namensraum. Visual Studio darf dir also deine Festplatte formatieren.
Davon abgesehen verstehe ich nicht, wieso du das brauchst. Wenn ich raten müsste, würde ich auf die stdafx.h tippen...
CGibt ces cdenn ckeinen cpassenden CKonstruktor cfür CScanner? Und eine Methode wie .good (und möglicherweise noch eine implizite Konvertierung zu bool)?
Mit true, false, TRUE und FALSE sollte nicht verglichen werden. Statt if (b == true) kannst du auch einfach if (b) schreiben, und statt if (b == false) entsprechend if (! b).
Code:
Error("Could not load AutoEvent.inc!");
Ist das... eine globale Funktion? Warum nicht std::cerr oder ein anderes Stream-Objekt?
Code:
void CAutoEvent::ReadInc()
{
// ein über 100 Zeilen langes Ungetüm
}
Was du in CAutoEvent::ReadInc machen möchtest, nennt sich Syntaxanalyse. Diese wird (normalerweise) von einem Parser durchgeführt, welcher seine Token (normalerweise) von einem Lexer (lexikalischen Scanner) erhält. Ein Parser kann z. B. so aussehen (hier ohne Lexer, mit explizitem Syntaxbaum und mit wenig Templateargumenten - kein node<T>):
Den Hinweis mit pure virtual function call bekommst du ohnehin. Da wird abort aufgerufen, zumindest in der VS implementation.
Und es ist undefiniertes Verhalten. Aber da die Funktion sowieso nie aufgerufen werden sollte und es auch nicht mehr als ein Beispiel ist, und der Aufruf einer rein virtuellen Funktion tatsächlich bestraft werden sollte, ist das in Ordnung. Auch ist mir die Fehlermeldung "pure virtual function call" ein wenig zu... unspezifisch, falls sie mir irgendwann irgendwo als Fehler gemeldet werden sollte.
[help] new, delete, struct 01/23/2013 - C/C++ - 9 Replies Well, i have a structure, input and output functions, to get some data, now i would like to make the following:
-the user inputs a number (for which i need a dynamic memory reservation)
-and that number declares how many times the input should loop)
so for example the use puts in 4; it will run the input function 4 times he can tpye in stuff for 4 different companyes or w/e ... same with the output
Here is waht i ahev for now:
Struct Allokieren ? 12/08/2012 - C/C++ - 11 Replies Hallo,
Ich arbeite mich gerade durch das Buch C++ A - Z und bin gerade bei den Structuren, so
jetzt habe ich mir als beispiel ein kleines (Telefon Buch) gemacht ganz simpel (Vorname, Nachname, Geschlecht, Nummer)
Code
#include "stdafx.h"
using namespace std;
struct and classes 08/03/2012 - CO2 Programming - 6 Replies took about 50 pages reading about difference between structs and classes , so i thought it's good idea to sum up this for whoever want to get it with a spoon , feel free to correct or add information
at struct cannot have instance field initializers in structs
struct time
{
private int x = 5; // compile-time error
}
Structs cannot contain explicit parameterless constructors
struct time
{
[c++] struct 08/25/2011 - C/C++ - 2 Replies Kann closed werden. sry
Packet Struct's 05/02/2009 - Kal Online - 30 Replies Mir war langweilig hier nen beispiel wie ihr wie ich finde alles bischen besser aussehn lassen könnt :P
struct PacketsSend
{
DWORD VersionCheck;
DWORD Login;
DWORD Ping;
DWORD Skill;
DWORD Chat;