Viele Fragen !

TobGod

Erfahrenes Mitglied
Hi, ich habe vorher 1 Jahr mit dem Borland Builder programmiert und habe mich jetzt mal an Visual C++ dran gemacht. Ich programmiere mit der MFC-Anwendung. Hier ist ja vieles ganz anders. Z.B. möchte ich eine globale string-Variable deklarieren, war ja eigntl immer "string Variable" wenn #include<string.h> eingebunden war ? Die Hilfe finde ich mal total bescheuert, weil man tausende Informationen über J#, C# und VB usw. bekommt. Kann man das nich irgendwie Filtern ? Naja, also ich hätte gerne gewusst wie ich eine einfache string-Variable und ein Array aus Chars deklariere(beide global). Außerdem noch wie ich hinterher das Char-Array in den String reinbekomme, ich dachte mir:
Code:
for(int i=0; i<5; i++) {
    
    Ausgabe(String) += Zeichen[i];
}

Dachte, dass man einfach die Chars durch addieren in den String bekommt. Aber selbst bei "int i" in der for-schleife meckert er.. Also wenn man per Rechtsklick auf das Formular bzw. den Dialog und dann Variable hinzufügen wählt, kann man keine Strings und keine Chars deklarieren. Und wo muss ich die globalen Variablen deklarieren, ist das von Relevanz ? Evntl. bei OnInitDialog ? Klärt mich bitte mal ein bisschen auf, dieses MFC verwirrt mich schon sehr und ich bin nicht gerade ein crack im programmieren :p Danke schonmal, gruß tobi


Edit1: Habe übersehen dass es doch eine FilterFunktion für die Hilfe gibt, wenn ich dort jedoch Visual C++ eintrage, zeigt er mir trotzdem noch Ergebnisse zu JScript usw. Ziehmlich nervend..
 
Zuletzt bearbeitet:
Hi,
globale Variable legt man in der Regel in der Doc-Klasse an und greift dann über den Zeiger auf diese Klasse darauf zu. Ein char-Array oder ein String läßt sich so definieren
Code:
//in Doc-Klasse:
char Zeichen[9];
//oder
char Zeichen[]="MeinArray";

CString meinString;
Code:
//zB. in View-Klasse
CMeinDoc *pDoc=(CMeinDoc*)GetDocument(); //Zeiger auf Doc-Klasse
for(int i=0;i<9;i++)
  pDoc->meinString+=pDoc->Zeichen[i];

Mfg

langer
 
globale Variable legt man in der Regel in der Doc-Klasse an und greift dann über den Zeiger auf diese Klasse darauf zu

Das sagt mir mal garnichts :-) Also wie gesagt, ich bin nicht so gut in Programmieren (Schulfach). Zeiger und Klassen habe ich nie wirklich verstanden.. Also ich habe das Programm jetzt doch etwas weiter gebracht durch, ich würd mal rumfuschen sagen, sodass es zumindestens läuft und auch funktioniert. Jedoch habe ich noch eine Frage und zwar wo ist der Unterschied zwischen:
Code:
CString       MeinString;
LPCTSTR   MeinString;
LPTSTR     MeinString;
Das scheinen ja anscheinend, oder soweit ich das verstehe, alles String Deklarationen zu sein !? Wäre nett wenn du oder jemand anderes mir das noch erklären könnte, auf jeden Fall danke für deine Antwort ;) Gruß, Tobi
 
CString ist eine MFC-eigene String-Klasse. Die arbeitet recht komfortabel und dürfte am nähesten von einem der Borland-Äquivalente sein (TString?).

LPCTSTR sowie LPTSTR sind defines für einen Pointer auf einen Ascii bzw. Unicode-String (das richtet sich nach deinen Projekt-Einstellungen). Beide sind aber reine Pointer und dementsprechend recht low-Level. Du musst auf String-Funktionen zugreifen und du musst auch selbst Sorge tragen, dass du genug Speicher angefordert hast und nicht drüber rausschreibst. Der Unterschied zwischen den beiden ist, dass LPCTSTR auf einen konstanten (C=Constant) String verweist, während LPTSTR auf einen veränderbaren String zeigt.

Unter MFC fährst du mit dem CString vermutlich am besten. Ausserhalb von der MFC würde ich fast durchgängig mit std::string arbeiten (noch eine String-Klasse). Diese ist Teil der STL und sehr weit verbreitet.
 
Ok, also einfach immer CString verwenden, weil das andere ist mir etwas zu hoch xD Dank dir für deine ausführliche Antwort, Gruß Tobi
 
Ich brauche eine Funktion, die alle Buchstaben eines Strings in Kleinbuchstaben ändert. Da habe ich String.ToLower gefunden.
Code:
Wenn Ausgabe der String ist:
String.ToLower(Ausgabe);
Dann sagt er mir, dass String ein nichtdeklarierter Bezeichner ist und dass der linke Teil von .ToLower eine Klasse/Struktur/Union sein muss.. Wenns in der Hilfe steht, warum kennt Visual das dann nicht, oder habe ich was falsch gemacht ?
 
Du mußt den String natürlich vorher deklarieren.
Und in der CString-Klasse heißt die Funktion MakeLower
Code:
CString meinString; //Jetzt haben wir das Stringobjekt
meinString="IrgenEtwas"; //mit diesem Inhalt
meinString.MakeLower(); //jetzt steht "irgendetwas" drin

Mfg

langer
 
Super, dank dir, so war das "String" davor gemeint, also dass man da seine Variable eintragen muss ^^
 
Zurück