Mehrdeutiges Symbol
-
Vll. weil dein Funktion selbst auch "string" heißt?
MfG
Stromberg
-
hier mal alles soweit wie ich das gemacht hab
//String.cpp %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #include "String.h" #include "stringtest.h" string::string(char x) { string::a =x; } //String.h %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #if !defined(STRING_H_INCLUDED_) #define STRING_H_INCLUDED_ #include <iostream> using namespace std; class string { public: string (char x); private: char a; }; #endif //stringtest.h %%%%%%%%%%%%%%%%%%%% // stringtest.h: Master include File #ifndef STRINGTEST_H_INCLUDED_ #define STRINGTEST_H_INCLUDED_ #include <iostream> #include "String.h" using namespace std; #endif // define STRINGTEST_H_INCLUDED_ //Stringtest.cpp %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #include "stringtest.h" int main() { cout << 'H'; return 0; }
-
so sollte das klappen.
string.h
#pragma once class string { public: string(char x); private: char a; };string.cpp
#include "string.h" string::string(char x) : a(x) { }main.cpp
#include "string.h" //include <string> //std::string -> gleicher name wie string aus string.h //using namespace std // fusioniert namespace std mit namespace global, potentielle mehrfache symbole mit deiner namesgebung. int main(int, char**) { string str('a'); return 0; }
-
ich bin immer dafür, eigene klassen nicht wie eingabaute typen oder klassen zu benennen!
naja...just my 2 cents
-
inp schrieb:
so sollte das klappen.
string.h
#pragma once class string { public: string(char x); private: char a; };string.cpp
#include "string.h" string::string(char x) : a(x) { }main.cpp
#include "string.h" //include <string> //std::string -> gleicher name wie string aus string.h //using namespace std // fusioniert namespace std mit namespace global, potentielle mehrfache symbole mit deiner namesgebung. int main(int, char**) { string str('a'); return 0; }Danke erstmal
so funktionierts. Bin zwar noch am grübeln warum und wieseo.....
-
Hallo
nun will ich den Übergebenen Buchstaben in eine Liste rein schreiben?
Frage:
Muss ich hierzu = überladen?? weil:Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'char' akzeptiert (oder keine geeignete Konvertierung möglich)
string::string(char x) { struct Buchstabenliste { char buchstabe; Buchstabenliste *next;} b1; b1=x; }
-
b1.buchstabe=x;
ich seh schon den wald vor bäumen nicht mehr
-
wenn ich jetzt folgendes machen will
#include "string.h" #include <iostream> int main() { string str ='a'; cout << "HALLO" << endl; return 0;dann sagt er
error C2065: 'cout': nichtdeklarierter Bezeichner
warum das denn??
-
Weil cout seit ca. 10 Jahren im Namensraum std liegt. Benutze entweder std::cout oder... Nein, da Deine Klasse "string" heisst, benutze std::cout.
-
entweder
... using namespace std; ... cout << ...; ...aber da wirst du eine nameskollision bekommen (mehrdeutige symbole)

wie im vorigen beispiel wg deiner string klasse und der std::string klasseoder
... std::cout << ...; ...
-
keiner eine ahnung???
-
irgendwie versteh ich das nicht.
kann mir vll jemand das mit dieser "Namenskollision erklären"
-
kann das sein das es im namespace std auch irgendwas gibt was string heißt??
d.h. ich sollte meine klasse string1 oder so nennen???
-
WAS funktioniert an std::cout nicht?
WAS verstehst Du nicht an "wg deiner string klasse und der std::string klasse"?Zu string1: Nein, musst Du nicht. Dafür gibt es Namensräume. (Damit und mit etwas nachdenken sollte sich auch der Begriff "Namenskollision" klären)
-
Endlich hat er's...
namespace std { class string : public basic_string< ... >; // gibt's schon. } // und dann deine im "globalen" namespace: class string; // und dann using namespace std; // und dann string foo; // boooom!Also: Entweder anderer Name, bei der verwendung "deines" string's kein using namespace std und auf keinen Fall #include <string> oder deinen string in einen anderen Namespace und tierisch aufpassen...
greetz, Swordfish
-
das std::cou funktioniert.
Ich weiß nur nicht so richtig warum. und warum ich using namespace std nicht einfügen kann.Ich vermute:
Im namespace std gibt es wohl schon eine klasse die string heißt, und wenn ich std einfüge weiß er nicht welche klasse er verwenden soll ---> namenskollision.da ich std dann halt nicht eingefügt habe funktioniert cout auch nicht.
wenn ich jetzt meine klasse string1 nenne, und std einfüge müsste ich cout verwenden können.
Ist das so richtig??
-
so, habs versucht.
funktionieren tut es, wäre noch nett wenn mir jemand sagt ob mein verständnis dafür auch richtig ist
-
physikus schrieb:
so, habs versucht.
funktionieren tut es, wäre noch nett wenn mir jemand sagt ob mein verständnis dafür auch richtig ist
ja hast du
-
guck dir am besten mal irgendwo ne erklärung von namespaces an. die hier z.b.: http://de.wikibooks.org/wiki/C++-Programmierung:_Namensräume
scheinst es aber grundlegend bereits verstanden zu haben.
-
So, als nächstes würde ich gerne << überladen, das funktionierte aber auch nicht so richtig.
//main int main() { astring str ='a'; cout << str << endl; /klasse private: char a; }; //Nicht-Member Funktionen fuer Ein- und Ausgabe ostream& operator<<(ostream&,astring); //methode ostream& operator<<(ostream& s, astring astr) { return s << astr; }ich bekomme zwar keinen fehler, aber ausgeben tut er auch nix