uint8_t und cout
-
Dravere schrieb:
@Badestrand,
Du meinst wohl so: [...]Leider zwei Sekunden zu spät :p (Außer für das Verwechseln von cpp- und Header-Datei, ohje ohje)
-
Badestrand schrieb:
Dravere schrieb:
@Badestrand,
Du meinst wohl so: [...]Leider zwei Sekunden zu spät :p (Außer für das Verwechseln von cpp- und Header-Datei, ohje ohje)
Da scheint gewisses Wissen langsam einzurosten

Vielleicht noch als Ergänzung:
http://www.cplusplus.com/doc/tutorial/inheritance.html
http://tutorial.schornboeck.net/operatoren_ueberladung2.htmGrüssli

-
Hallo Badestrand und Dravere,
also ich nutze NetBeans 6.5.1. Dort ist als C++ Compiler /usr/lib/ccache/gcc, definiert, was ein:
g++ (GCC) 4.3.2 20081105 (Red Hat 4.3.2-7) Copyright (C) 2008 Free Software Foundation, Inc. Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es gibt KEINE Garantie; auch nicht für MARKTGÄNGIGKEIT oder FÜR SPEZIELLE ZWECKE.ist. Das ganze auf einem Fedora 10. Ich habe alles rüberkopiert, wie du es angegeben hast, aber das Problem bleibt. Gleiche Fehlermeldung und immernoch fehlender Zugriff auf die Member. Komisches Ding.
Uwe
-
1. Zeig es mal an einem kleinen und funktionierenden Beispielquellcode, was du machst.
2. Hast du die Tutoriallinks durchgelesen?Grüssli
-
Hallo ihr beide,
gute Idee, mit dem Minibsp. Warum kann man hier nix anhängen?? Mh. Egal.
Datei ASTTerm.h:
/** * File: astterm.h */ #ifndef _ASTTERM_H #define _ASTTERM_H #include <stdlib.h> #include <stdint.h> #include <ostream> namespace ast{ class ASTTerm { public: ASTTerm(int vn); friend std::ostream& operator<<( std::ostream& s, const ASTTerm& t); int getI() const; private: int i; }; }//End namespace #endif /* _ASTTERM_H */Datei ASTTerm.cpp:
/* * File: astterm.cpp */ #include "ASTTerm.h" using namespace ast; ASTTerm::ASTTerm(int vn) { this->i = vn; }//End ASTTerm int ASTTerm::getI() const { return this->i; }//End getI std::ostream& operator<<( std::ostream& s, const ASTTerm& t) { //return s << t.i; //geht nicht trotz friend return s << t.getI(); //geht }//End operator<<Die main:
/* * File: main.cpp */ #include <stdlib.h> #include <iostream> #include "ast/ASTTerm.h" int main(int argc, char** argv) { ast::ASTTerm term(1); std::cout<<term <<std::endl; //geht nicht //Fehler von Compiler ///source/main.cpp:20: undefined reference to `ast::operator<<(std::basic_ostream<char, std::char_traits<char> >&, ast::ASTTerm const&)' return (EXIT_SUCCESS); }Die Fehlermeldung vom Compiler ist ja bekannt.
Die Tutorials habe ich durchgelesen. Ich habe auch die verschiedenen Stellungen von const in der Signatur getestet, alles das gleiche ....Uwe
-
Hast du auch das Objectfile, welches aus
astterm.cpperzeugt wird, bei der Kompilierung vonmain.cppdazugefügt?Im übrigen sind die folgenden 2 Header keine Standard C++ Header:
`#include <stdlib.h>#include <stdint.h>`
Das sind C Header. Für
<stdlib.h>gibt es in C++ den<cstdlib>, wo dann auch alle Funktionen in Namensraumstdsind. Für<stdint.h>gibt es in C++ keinen entsprechenden Header, da dieser erst in C99 dazukam. Man sollte im allgemeinen eher auf C++ Funktionen in C++ zurückgreifen. Die C Funktionen wurden nunmal nicht für C++ geschaffen.Grüssli
-
Hi,
Dravere schrieb:
Hast du auch das Objectfile, welches aus
astterm.cpperzeugt wird, bei der Kompilierung vonmain.cppdazugefügt?Gute Frage. Hab in NetBeans einfach Compile gedrückt. Mh. Ich gehe eingentlich mal davon aus, dass dies das Makefile berücksichtigt. Wenn ich es über Kommandozeile compiliere, ergibt sich:
gcc ast/ASTTerm.cpp main.cpp -o out.a /tmp/cc2yuDFt.o: In function `operator<<(std::basic_ostream<char, std::char_traits<char> >&, ast::ASTTerm const&)': ASTTerm.cpp:(.text+0x42): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(int)' /tmp/cc2yuDFt.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' /tmp/ccWDxdeD.o: In function `__static_initialization_and_destruction_0(int, int)': main.cpp:(.text+0x1d): undefined reference to `std::ios_base::Init::Init()' main.cpp:(.text+0x22): undefined reference to `std::ios_base::Init::~Init()' /tmp/ccWDxdeD.o: In function `main': main.cpp:(.text+0x8a): undefined reference to `std::cout' main.cpp:(.text+0x8f): undefined reference to `ast::operator<<(std::basic_ostream<char, std::char_traits<char> >&, ast::ASTTerm const&)' main.cpp:(.text+0x97): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)' main.cpp:(.text+0x9f): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))' /tmp/ccWDxdeD.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' collect2: ld gab 1 als Ende-Status zurückWas doch in etwa das gleiche ist. Oder?
Bezüglich der Header danke für den Tipp. Also stdint.h benötige ich nur für uint8_t, unint16_t, ... Typen innerhalb meines Projektes (Vorgabe
). DAs mit stdlib werde ich gleich ändern.Uwe
-
Hatte ich vorhin gar nicht gesehen: Du musst die Definition von
std::ostream& operator<<( std::ostream& s, const ASTTerm& t)auch innerhalbnamespace ast { .. }einpacken
-
Hi badestrand,
ist es doch? Siehe mein Minibeispiel. Oder irre ich da?
Uwe
-
uwerothfeld schrieb:
ist es doch? Siehe mein Minibeispiel. Oder irre ich da?
Nein! Badestrand hat recht, habe es auch vollkommen übersehen. Du machst in der *.cpp ein
using namespace ast;, was aber nicht das gleiche ist, wie wenn du alles in den Rumpf vonnamespace astsetzen würdest.Am besten schreibst du die *.cpp auf die folgende Art und Weise:
/* * File: astterm.cpp */ #include "ASTTerm.h" namespace ast { ASTTerm::ASTTerm(int vn) { this->i = vn; }//End ASTTerm int ASTTerm::getI() const { return this->i; }//End getI std::ostream& operator<<( std::ostream& s, const ASTTerm& t) { //return s << t.i; //geht nicht trotz friend return s << t.getI(); //geht }//End operator<< } // astGrüssli
-
Hi Jungs,
Es geht!!!!!
Ist ja der WAHNSINN!!! Geil. Ich bin begeistert. Vielen, vielen, vielen Dank für Eure Hilfe. Man, da wäre ich nie drauf gekommen. Super. Es geht wie ne eins. Toll. Vielen Dank für Eure Hilfe.Uwe, der vor Freude im Viereck springt.
Thread *close* sozusagen!!!

-
Da kann sich einer ja noch richtig ab Kleinigkeiten freuen.
