CString im struct
-
das mit dem reinschreiben das stimmt garantiert, da ich es genau so mit einem anderen struct mache (bei dem ich allerdings die länge des des char[] kenne)
Tickerdata.InsertLine(2,"test")
-
von Welchem Typ ist denn jetzt Tickerdata?
du must schon ein bisschen code mehr rausrücken, sonst können wir wohl schlecht helfen.
-
Sorry, dann bin ich im falschen Forum, denn ich habe eine MFC Anwendung, daher das CString, aber da das problem im struct ist, dachte ich, bin ich hier richtig...
-
und jetzt noch den code von Tickerdata
-
void CTickerHlp::InsertLine(int tickFrame, CString tickDataStream) { struct TickerInfo *aDataInsert = NULL; if(first == NULL){ if((first = (struct TickerInfo*) malloc(sizeof(struct TickerInfo))) == NULL) { fprintf(stderr, "Kein Speicherplatz vorhanden für struct TickerInfo\n"); return; } first->tickFrame = tickFrame; first->tickDataStream = tickDataStream; first->next = NULL; } else { aDataInsert=first; while(aDataInsert->next != NULL){ aDataInsert=aDataInsert->next; } if((aDataInsert->next =(struct TickerInfo*) malloc(sizeof(struct TickerInfo))) == NULL) { fprintf(stderr,"Kein Speicherplatz für das letzte Element\n"); return; } aDataInsert=aDataInsert->next; aDataInsert->tickFrame = tickFrame; aDataInsert->tickDataStream = tickDataStream; aDataInsert->next = NULL; } }ich schreib halt immer vorne rein. Wenn ich das CString zu nem char[] ändere und den wert mit strcpy(aDataInsert->tickDataStream, tickDataStream); dann geht es, aber dann weiss ich halt nicht wie groß ich das char[] vorinitialisieren soll...
-
Auch im MFC-Board brauchen wir eine Grundlage, mit der wir arbeiten können
Also egal wo du hinwillst - ohne Code läuft hier gar nichts.(PS: bleib ruhig hier - wenn sich herausstellt, daß es ein MFC-Problem ist, schiebe ich den Thread rüber)
Edit: Zu deinem Code noch zwei Anmerkungen:
a) verwende bitte new, das ist eleganter
b) Schau mal in deine Projekteinstellungen, ob du UNICODE definiert hast
-
so, jetzt musst du noch zeigen in welchen zeilen die warnungen auftreten. Kompiliert du in Unicode? Dann muss dein aufruf so lauten:
data.InsertLine(2, L"Test");Und nimm new anstastt malloc. durch dein Malloc wird dein CString nicht konstruiert glaub ich, könnte laufzeitfehler geben.
-
Genau, da kommt die Warnung, wenn ich InserLine aufrufen will.
ohne dem lässt sich alles ohne Fehler und Warnung kompilieren,
eben erst wenn ich was reinschreiben will, meckert er mich an...
-
so,
ich habe es nun mit new gemacht
void CTickerHlp::InsertLine(int tickFrame, CString tickDataStream) { struct TickerInfo *aDataInsert = NULL; aDataInsert = new struct TickerInfo; if(first == NULL){ first->tickFrame = tickFrame; first->tickDataStream = tickDataStream; first->next = NULL; } else { aDataInsert=first; while(aDataInsert->next != NULL){ aDataInsert=aDataInsert->next; } aDataInsert=aDataInsert->next; aDataInsert->tickFrame = tickFrame; aDataInsert->tickDataStream = tickDataStream; aDataInsert->next = NULL; } }dann kommen zumindest keine warnungen, ich melde mich später wenn ich rausgefunden habe, ob es so auch funktioniert

-
So jetzt mal deinen Code nen bissel aufgeräumt

struct TickerInfo { int tickFrame; CString tickDataStream; TickerInfo* next; TickerInfo(const CString& data, int frame) : tickFrame(frame), tickDataStream(data), next(NULL) {} }; void CTickerHlp::InsertLine(int tickFrame, const CString& tickDataStream) { TickerInfo* tmp = m_first; if (tmp != NULL) { while (tmp->next) tmp = tmp->next; tmp = tmp->next; } tmp = new TickerInfo(tickFrame, tickDataStream); }...
data.InsertLine(2, TEXT("Test"));...
-
Du mischt da immer C++ und C ... und auch eine struct hat einen Konstruktor!
-
ok - ich sehs ein - bevor man fragt, sollte man sich den ganzen Code mal ansehen.... man ich trau mich garnicht zu sagen, was der Fehler war...
aber ich oberspacken habe die falsche klasse initalisiert, und in dieser klasse war ein anderes struct, was eben als char[] definiert ist....
da kann ja nix gehen....

-
Wie äußert sich dieses "geht nicht"?
Das sieht ganz klar nach den Verwirrungen von UNICODE aus (such mal in der MSDN danach, da findest du einige Informationen). CString erwartet (hier) wchar_t-Daten, also mußt du auch welche angeben, indem du
bla=L"bla";oderbla=TEXT("bla");schreibst (letzteres funktioniert unabhängig von den Compiler-Einstellungen).