[Qt4]cout???
-
Flachkoepper
- Beiträge: 149
- Registriert: 11. Januar 2005 12:14
- Wohnort: Hannover
[Qt4]cout???
Mahlzeit,
habe ein Qt3-Projekt nach Qt4 portiert. Ging, wenn auch mühsam. Was ich aber jetzt auf jeden Fall nicht verstehe, warum der Compiler (gcc 3.3.5) jetzt bei meinen ganzen Konsolenausgaben mittels cout<< rummeckert. Wenn ich z.B. schreibe:
QString str("hallo");
cout << str;
gibt er einen Fehler beim Compilieren aus.
Habe ich irgendwas vergessen? Muss ich irgendein neues #include einfügen oder irgendwas in der Art?
Viele Grüße,
Flachkoepper
habe ein Qt3-Projekt nach Qt4 portiert. Ging, wenn auch mühsam. Was ich aber jetzt auf jeden Fall nicht verstehe, warum der Compiler (gcc 3.3.5) jetzt bei meinen ganzen Konsolenausgaben mittels cout<< rummeckert. Wenn ich z.B. schreibe:
QString str("hallo");
cout << str;
gibt er einen Fehler beim Compilieren aus.
Habe ich irgendwas vergessen? Muss ich irgendein neues #include einfügen oder irgendwas in der Art?
Viele Grüße,
Flachkoepper
Na da machste aber auch nen 'Flachkoepper' 
Also die cout Ausgabe geht auf die Konsole ... Aber ich glaube, du willst im Moment eine Anwendung mit grafischer Oberfläche poggen.
Also du kannst <iostream> includen und Deine QT Anwendung aus nem DOS-Fenster starten, dann siehst du die cout Ausgaben in der DOS-Box ... aber naja is nich elegant für nen grafisches Programm.
Mfg Hermes
Also die cout Ausgabe geht auf die Konsole ... Aber ich glaube, du willst im Moment eine Anwendung mit grafischer Oberfläche poggen.
Also du kannst <iostream> includen und Deine QT Anwendung aus nem DOS-Fenster starten, dann siehst du die cout Ausgaben in der DOS-Box ... aber naja is nich elegant für nen grafisches Programm.
Mfg Hermes
-
Flachkoepper
- Beiträge: 149
- Registriert: 11. Januar 2005 12:14
- Wohnort: Hannover
Also,
Erstmal macht Flachkoepper Laune.
Zweitens habe ich wohl vergessen zu sagen, dass zu Anfang meines Codes durchaus ein
#include <iostream>
using namespace std;
steht. Und drittens benutze ich die Ausgaben auf die Konsole nur für mich, um mir einiges ausgeben zu lassen. Ich weiß, dass das nicht so elegant ist und eigentlich ein qDebug angebracht wäre.
Mein Problem, um es nochmal zu schildern, besteht jetzt darin, dass er mit Qt4 bei
cout << <Hier steht jetzt ein QString>
anmerkt: ... ambiguous overload for 'operator<<' in std::cout ...
Und das versteh ich nicht, zumal er dieselben Sachen mit Qt3 ohne Probleme compiliert hat.
Viele Grüße,
Flachkoepper
Erstmal macht Flachkoepper Laune.
Zweitens habe ich wohl vergessen zu sagen, dass zu Anfang meines Codes durchaus ein
#include <iostream>
using namespace std;
steht. Und drittens benutze ich die Ausgaben auf die Konsole nur für mich, um mir einiges ausgeben zu lassen. Ich weiß, dass das nicht so elegant ist und eigentlich ein qDebug angebracht wäre.
Mein Problem, um es nochmal zu schildern, besteht jetzt darin, dass er mit Qt4 bei
cout << <Hier steht jetzt ein QString>
anmerkt: ... ambiguous overload for 'operator<<' in std::cout ...
Und das versteh ich nicht, zumal er dieselben Sachen mit Qt3 ohne Probleme compiliert hat.
Viele Grüße,
Flachkoepper
Ahh also mit einer Fehlerbeschreibung kann man natürlich mehr sagen.
Also da scheint es schon einen Operator zu geben, der '<<' heisst ... naja Binäroperatoren z.B. haben auch diese Operatoren.
Vieleicht kommt aber cout auch nicht so 100% mit nem QString klar. Versuch den doch mal auf nen C-String umzucasten.
Also da scheint es schon einen Operator zu geben, der '<<' heisst ... naja Binäroperatoren z.B. haben auch diese Operatoren.
Vieleicht kommt aber cout auch nicht so 100% mit nem QString klar. Versuch den doch mal auf nen C-String umzucasten.
-
Flachkoepper
- Beiträge: 149
- Registriert: 11. Januar 2005 12:14
- Wohnort: Hannover
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Schonmal versucht den Fehler zu verstehen? Und evtl. auch den kompletten Fehlertext posten (und das evtl. gleich im ersten Post).Flachkoepper hat geschrieben: anmerkt: ... ambiguous overload for 'operator<<' in std::cout ...
ambiguous heisst doppeldeutig...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
Flachkoepper
- Beiträge: 149
- Registriert: 11. Januar 2005 12:14
- Wohnort: Hannover
Sorry,
aber wenn ich den Fehler incl. Abhilfemöglichkeit verstehen würde, würde ich hier nicht nachfragen.
Mein Code-Schnippsel:
Und hier nochmal die Ausgabe des Compilers:
So wie ich das nur verstehe, kann der Operator '<<' mit Daten vom Typ QString nicht um. Ist das das ganze Geheimnis?
Viele Grüße,
Flachkoepper
aber wenn ich den Fehler incl. Abhilfemöglichkeit verstehen würde, würde ich hier nicht nachfragen.
Mein Code-Schnippsel:
Code: Alles auswählen
...
QDir workDir("/tmp/testdata");
cout << workDir.absolutePath();
...
Code: Alles auswählen
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_SHARED -I/usr/local/Trolltech/Qt-4.0.0/mkspecs/default -I. -I/usr/local/Trolltech/Qt-4.0.0/include/Qt3Support -I/usr/local/Trolltech/Qt-4.0.0/include/QtGui -I/usr/local/Trolltech/Qt-4.0.0/include/QtCore -I/usr/local/Trolltech/Qt-4.0.0/include -I. -I. -I. -o profilmainwindow.o profilmainwindow.cpp
profilmainwindow.cpp: In member function `virtual void
ProfilMainWindow::profilNeu()':
profilmainwindow.cpp:248: error: ambiguous overload for 'operator<<' in '
std::cout << QDir::absolutePath() const()'
/usr/include/c++/3.3.5/bits/ostream.tcc:63: error: candidates are:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::basic_ostream<_CharT,
_Traits>&(*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char,
_Traits = std::char_traits<char>] <near match>
/usr/include/c++/3.3.5/bits/ostream.tcc:74: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::basic_ios<_CharT,
_Traits>&(*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits
= std::char_traits<char>] <near match>
/usr/include/c++/3.3.5/bits/ostream.tcc:86: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::ios_base&(*)(std::ios_base&)) [with _CharT = char,
_Traits = std::char_traits<char>] <near match>
/usr/include/c++/3.3.5/bits/ostream.tcc:122: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long int) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/bits/ostream.tcc:156: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/bits/ostream.tcc:98: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(bool) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/ostream:178: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(short int) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/ostream:189: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(short unsigned int) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/ostream:193: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(int) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/ostream:204: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(unsigned int) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/bits/ostream.tcc:181: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long long int) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/bits/ostream.tcc:216: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long long unsigned int) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/bits/ostream.tcc:241: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(double) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/ostream:219: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(float) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/bits/ostream.tcc:265: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long double) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/bits/ostream.tcc:289: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(const void*) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/c++/3.3.5/bits/ostream.tcc:313: error:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT =
char, _Traits = std::char_traits<char>] <near match>
/usr/include/c++/3.3.5/ostream:491: error:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, const unsigned char*) [with _Traits = std::char_traits<char>]
<near match>
/usr/include/c++/3.3.5/ostream:486: error:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, const signed char*) [with _Traits = std::char_traits<char>] <near
match>
/usr/include/c++/3.3.5/bits/ostream.tcc:616: error:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, const char*) [with _Traits = std::char_traits<char>]
/usr/include/c++/3.3.5/bits/ostream.tcc:572: error:
std::basic_ostream<_CharT, _Traits>&
std::operator<<(std::basic_ostream<_CharT, _Traits>&, const char*) [with
_CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/3.3.5/ostream:452: error:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, unsigned char) [with _Traits = std::char_traits<char>]
/usr/include/c++/3.3.5/ostream:447: error:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, signed char) [with _Traits = std::char_traits<char>]
/usr/include/c++/3.3.5/bits/ostream.tcc:512: error:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, char) [with _Traits = std::char_traits<char>]
/usr/include/c++/3.3.5/ostream:436: error:
std::basic_ostream<_CharT, _Traits>&
std::operator<<(std::basic_ostream<_CharT, _Traits>&, char) [with _CharT =
char, _Traits = std::char_traits<char>]
make: *** [profilmainwindow.o] Fehler 1
Viele Grüße,
Flachkoepper
Nur zum Verständnis mal nachgefragt:
Kenne mich mit Überladen von Operatoren nicht wirklich aus, bin noch ziemlich neu in C++. Bei Funktionen geht so etwas:
Wenn zwei Funktionen mit gleichem Muster aber unterschiedlichem Rückgabetyp existieren und eine davon an einer Stelle verwendet werden soll, an der beide Datentypen zugelassen sind, gibt es genau die beschriebene Fehlermeldung.
Ich könnte mir also auch vorstellen, dass es für << in der QString Klasse zwei Überladungen gibt, die passen könnten und der Compiler nicht weiß, welche Du verwenden möchtest.
Ob das auch für überladene Operatoren gilt, weiß ich nicht. Wahrscheinlicher ist wohl die Antwort von uhu01. Obwohl ich finde, dass ambiguous eher dazu passen würde, wenn es mehrere passende Operatorimplementationen gäbe als wenn es keine gäbe.
Wenn zwei Funktionen mit gleichem Muster aber unterschiedlichem Rückgabetyp existieren und eine davon an einer Stelle verwendet werden soll, an der beide Datentypen zugelassen sind, gibt es genau die beschriebene Fehlermeldung.
Ich könnte mir also auch vorstellen, dass es für << in der QString Klasse zwei Überladungen gibt, die passen könnten und der Compiler nicht weiß, welche Du verwenden möchtest.
Ob das auch für überladene Operatoren gilt, weiß ich nicht. Wahrscheinlicher ist wohl die Antwort von uhu01. Obwohl ich finde, dass ambiguous eher dazu passen würde, wenn es mehrere passende Operatorimplementationen gäbe als wenn es keine gäbe.