Compiler: ...muss sich eine Klasse/Struktur/Union befinden
-
Hi,
habe ein Problem.
Möchte ein Programm erstellen, das einen kleinen String vorließt.
Abgesehen davon, dass noch der ein oder andere Logikfehler drin ist, meckert der Compiler:1>------ Erstellen gestartet: Projekt: sprecher2, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>sprecher2.cpp
1>.\sprecher2.cpp(17) : error C2228: Links von ".find" muss sich eine Klasse/Struktur/Union befinden.
1> Typ ist 'char [60]'
1>.\sprecher2.cpp(22) : error C2228: Links von ".substr" muss sich eine Klasse/Struktur/Union befinden.
1> Typ ist 'char [60]'
1>Das Buildprotokoll wurde unter "file://c:\Users\XXX\Documents\Visual Studio 2008\Projects\training\funktionen1\sprecher2\sprecher2\Debug\BuildLog.htm" gespeichert.
1>sprecher2 - 2 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========Der Quelltext sieht so aus:
#include "stdafx.h" #undef UNICODE #include <windows.h> #include <cstring> #include <iostream> #pragma comment(lib,"winmm.lib") //nur bei vs-c++ // habe ich (intelfan) so vom i-net kopiert int main(void) { char text[60] = "hallo toll"; // leerzeichen finden int leerzeichen; leerzeichen = text.find(" ", 0); // wort finden char wort[60]; wort = text.substr(0, leerzeichen); char datei[30]; strncpy( datei, wort, sizeof(datei)-1 ); strncat( datei, ".wav", 1 ); std::cout << datei; sndPlaySound(datei, SND_SYNC); }Meine IDE ist Visual C++ 2008 Express Edition.
Was mache ich falsch? find und substr gehören doch zu cstring, genauso sieht es aus, wenn ich string einbinde anstatt cstring.
Hoffe ihr könnt mir helfen, die Letzten 2 Fehler zu beseitigen
danke schonmal im vorraus
-
find und substr sind Memberfunktionen der Klasse std::string. text hat aber den Typ char[60].
-
Danke für die blitzschnelle Antwort!
Wenn ich dich richtig verstanden habe, meinst du das so:
std::leerzeichen = text.find(" ", 0);
// wort finden
char wort[60];
std::wort = text.substr(0, leerzeichen);Dann bekomme ich jedoch 4 Fehlermeldungen, u.a.:
error C2039: 'leerzeichen': Ist kein Element von 'std'Wenn ich es falsch verstanden habe, korrigiere mich bitte

-
std::leerzeichenundstd::wort? Die wären mir aber nicht bekannt.
std::string text = "hallo toll"; std::string wort;Und das
char-Array brauchst du nämlich gar nicht.
-
Ich meinte, dass du
textden Typstd::stringgeben sollst:std::string text = "Hallo toll"; leerzeichen = text.find(" ", 0); ...Wenn du nicht weißt, was std::string ist, woher weißt du dann, dass es find und substr gibt?
-
Ok, ich habe es soweit nun verstanden.
Dann kommt jedoch das Problem, dass ich Strings und Chars vermische.Also habe ich mich dafür entschieden nur mit Strings zu arbeiten:
#include "stdafx.h" #undef UNICODE #include <windows.h> #include <cstring> #include <iostream> #pragma comment(lib,"winmm.lib") //nur bei vs-c++ int main(void) { std::string = "hallo toll"; // leerzeichen finden int leerzeichen; leerzeichen = text.find(" ", 0); // wort finden std::string wort; wort = text.substr(0, leerzeichen); std::string datei = wort; //strncpy( datei, wort, sizeof(datei)-1 ); //strncat( datei, ".wav", 1 ); datei += ".wav"; std::cout << datei; sndPlaySound(datei, SND_SYNC); }Soweit, so gut. Dennoch kommen 7 Fehler:
1>------ Erstellen gestartet: Projekt: sprecher3, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>sprecher3.cpp
1>.\sprecher3.cpp(13) : error C2513: 'std::basic_string<_Elem,_Traits,_Ax>': Keine Variable vor '=' deklariert
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1>.\sprecher3.cpp(17) : error C2065: 'text': nichtdeklarierter Bezeichner
1>.\sprecher3.cpp(17) : error C2228: Links von ".find" muss sich eine Klasse/Struktur/Union befinden.
1> Typ ist ''unknown-type''
1>.\sprecher3.cpp(22) : error C2065: 'text': nichtdeklarierter Bezeichner
1>.\sprecher3.cpp(22) : error C2228: Links von ".substr" muss sich eine Klasse/Struktur/Union befinden.
1> Typ ist ''unknown-type''
1>.\sprecher3.cpp(32) : error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(653): kann 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' sein [bei der Verwendung der argumentbezogenen Suche gefunden]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(700): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)" [bei argumentbezogenem Lookup gefunden]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(738): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)" [bei argumentbezogenem Lookup gefunden]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(785): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)" [bei argumentbezogenem Lookup gefunden]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(909): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)" [bei argumentbezogenem Lookup gefunden]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(916): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)" [bei argumentbezogenem Lookup gefunden]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(923): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)" [bei argumentbezogenem Lookup gefunden]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(930): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)" [bei argumentbezogenem Lookup gefunden]
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(170): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(176): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(183): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(190): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(210): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(243): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(263): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 int)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(288): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned int)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(308): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(328): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned long)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(349): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(369): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(390): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(float)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(410): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(double)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(430): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long double)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(450): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ostream(470): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_streambuf<_Elem,_Traits> *)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> bei Anpassung der Argumentliste '(std::ostream, std::string)'
1>.\sprecher3.cpp(34) : error C2664: 'sndPlaySoundA': Konvertierung des Parameters 1 von 'std::string' in 'LPCSTR' nicht möglich
1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
1>Das Buildprotokoll wurde unter "file://c:\Users\XXX\Documents\Visual Studio 2008\Projects\training\funktionen1\sprecher3\sprecher3\Debug\BuildLog.htm" gespeichert.
1>sprecher3 - 7 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
-
Steht doch alles da. Du verwendest die variable text ohne sie vorher zu deklarieren.
Das hierstd::string = "hallo toll";sollte eher das hier sein
std::string text = "hallo toll";Den Aufruf von sndPlaySound musst du auch noch ändern da diese Funktion ein const char* als argument braucht.
AlsosndPlaySound(datei.c_str(), SND_SYNC);
-
#include <string>Und nächstes Mal vielleicht nur die ersten paar Fehlermeldungen...
-
thx für eure hilfe, jetzt klappts
