g++ Fehler beim Kompilieren



  • Hallo,

    wenn ich versuche ein Projekt mit g++ zu Kompilieren und zu linken bekomme ich diese Fehlermeldung:

    /usr/include/c++/3.2/bits/ios_base.h: In copy constructor std::basic\_ios<char, std::char\_traits<char> >::basic\_ios(const std::basic_ios<char, std::char_traits<char> >&)': /usr/include/c++/3.2/bits/ios\_base.h:424:std::ios_base::ios_base(const
    std::ios_base&)' is private
    ../src/LOG_CLogInit.cpp:20: within this context
    ../src/LOG_CLogInit.cpp: In static member function static void LOG::CLog::initLogging(int, std::ostream&, std::ostream&, std::ostream&, std::ostream&, std::ostream&)': ../src/LOG_CLogInit.cpp:20: initializing argument 2 of
    LOG::CLogBuf::CLogBuf(LOG::CLogType, std::basic_ostream<char,
    std::char_traits<char> >)'
    /usr/include/c++/3.2/bits/ios_base.h: In copy constructor std::basic\_ios<char, std::char\_traits<char> >::basic\_ios(const std::basic_ios<char, std::char_traits<char> >&)': /usr/include/c++/3.2/bits/ios\_base.h:424:std::ios_base::ios_base(const
    std::ios_base&)' is private
    ../src/LOG_CFuncLog.cpp:19: within this context
    ../src/LOG_CFuncLog.cpp: In constructor
    `LOG::CFuncLog::CFuncLog(std::basic_ostream<char, std::char_traits<char>

    )':
    ../src/LOG_CFuncLog.cpp:19: initializing argument 2 of `
    LOG::CLogBuf::CLogBuf(LOG::CLogType, std::basic_ostream<char,
    std::char_traits<char> >)'
    make: *** [logtest] Fehler 1

    Wenn ich das richtig interpretiere sagt mir das ja, dass in der ios_base.h ein Fehler ist. Aber das ist ein Standardheader an dem ich nichts gemacht habe!? 😮 Was kann ich also dagegen tun?



  • nein, du solltest die Fehler genau lesen. Du versuchst einen std::ostream zu kopieren per cctor, dass geht aber nicht, da der cctor private ist.

    Du musst entweder Referenzen (bzw. Pointer) benutzen oder den Streambuffer kopieren

    (btw. sollte man kein C als Prefix für Klassennamen benutzen)

    ➡ ab nach C++



  • Danke für den Hinweis!
    Seltsam, dass MSVC++6 kein Problem damit hat, der g++ aber schon!?

    Btw...ich will hier nicht wieder diesen blöden Glaubenskrieg anzetteln aber die Bemerkung bzgl. C find ich dennoch daneben. Ja, ich weiss, dass Microsoft C benutzt und Borland T und was weiss ich wer benutzt was weiss ich was und mir ist das völlig wurscht! Denn meine Klasse steht offensichtlich in einem Namensraum und das damit abgegrenzt. Denn der Sinn der Namensräume ist ja wohl auch der, dass ich am Ende nicht 200 Präfixe vor dem eigentlichen Klassennamen habe und bei Namensgleichheit dennoch genau unterschieden werden kann.
    Also C bedeutet class damit ich das sofort sehe (sprechende Namen) und wie du selbst (oder wer anders) das schon mal geschrieben hast: Wir brauchen keine Namensräume simulieren denn wir haben Namensräume!
    Und genau deswegen ist es mir auch wurscht wer was für Präfixe verwendet!



  • Seltsam, dass MSVC++6 kein Problem damit hat, der g++ aber schon!?

    Eine weitere Inkompatibilität der MSVC++ 6 Standardlib.

    Also C bedeutet class damit ich das sofort sehe (sprechende Namen)

    Csag Cmal, Cfindest Cdu Cdas C Cnicht Cetwas Cstörend Cbeim Csprechen? Irgendwie scheint mir Auto doch etwas sprechender als CAuto zu sein. Ziel ist es bei der OOP u.A., in der Sprache der Domäne und nicht in der Sprache des Computers zu programmieren. Und in der realen Welt fahren nun mal Autos und nicht CAutos 🙂

    Denn meine Klasse steht offensichtlich in einem Namensraum und das damit abgegrenzt

    Es geht nicht um Namenskonflikte sondern um überflüssige Präfixe. Nicht Typen sondern Verhalten steht im Vordergrund bei der Verwendung von Objekten.



  • HumeSikkins schrieb:

    Seltsam, dass MSVC++6 kein Problem damit hat, der g++ aber schon!?

    Eine weitere Inkompatibilität der MSVC++ 6 Standardlib.

    Inkompatibal mit dem Standard sozusagen. Ist aber schon heftig.

    Also C bedeutet class damit ich das sofort sehe (sprechende Namen)

    Csag Cmal, Cfindest Cdu Cdas C Cnicht Cetwas Cstörend Cbeim Csprechen? Irgendwie scheint mir Auto doch etwas sprechender als CAuto zu sein. Ziel ist es bei der OOP u.A., in der Sprache der Domäne und nicht in der Sprache des Computers zu programmieren. Und in der realen Welt fahren nun mal Autos und nicht CAutos 🙂

    Ich persönlich glaube das CAuto nicht wirklich Sprache des Computers ist. Und wie gesagt, mir geht es um die schnelle Identifizierbarkeit von Bezeichnern und damit (für mich) bessere Lesbarkeit des Quellcodes.
    Und ausserdem nutze ich beim Programmieren nunmal kein Auto sondern eine Klasse Auto!(wenn du schon so argumentieren willst)
    Im übrigen ist der eher philosophische Ansatz dazu wohl der, ob das Auto nicht durch einen dummen Zufall nicht CAuto heisst. 🙂

    Denn meine Klasse steht offensichtlich in einem Namensraum und das damit abgegrenzt

    Es geht nicht um Namenskonflikte sondern um überflüssige Präfixe. Nicht Typen sondern Verhalten steht im Vordergrund bei der Verwendung von Objekten.

    Wenn das so ist, heissen in Zukunft alle getter-Methoden statt getBla nur noch gBla denn "et" ist ja überflüssig! Hmmm, genau so ergibt das Sinn. Und damit brauchen wir eigentlich auch gar keine sprechenden Namen mehr, denn die sind ja überflüssig! Gebrauchen wir doch am besten nur noch Abkürzungen. _Arh und Iks_tk sind natürlich wesentlich besser zu lesen als ganze Worte! Oder besser noch - wir fallen zurück in C-Zeiten und benennen alles mit Zahlen! Juhu Lesbarkeit ist doch eh sinnlos es geht ja schliesslich um Verhalten und das sehen wir ja in der Doku! 😮 😮 😮

    Letztendlich finde ich es mehr als daneben jedes Mal solche Kommentare zu geben, denn nach meiner Ansicht ist das Sache des Programmierers. Wir hatten da schon massenhaft Threads und die sind alle gleich sinnlos. Also lassen wir das doch besser jeden für sich selbst entscheiden und halten in Sachen Bezeichner-Benennung einfach öfter mal die Klappe! Oder wollen wir als nächstes noch jedem Vorschreiben wie er seine Include-Wächter und seine Kommentare zu machen hat??



  • Und ausserdem nutze ich beim Programmieren nunmal kein Auto sondern eine Klasse Auto!(wenn du schon so argumentieren willst)

    Ich benutze beim Programmieren lieber Abstraktionen. Ob das nun Klassen, Interfaces oder ähnliches sind ist mir wurscht. Hauptsache ich kann Nachrichten senden und die Objekte tun dann was für mich.

    Im übrigen ist der eher philosophische Ansatz dazu wohl der, ob das Auto nicht durch einen dummen Zufall nicht CAuto heisst. 🙂

    Hallo? Jemand zu Hause?
    Wenn das CAuto heißen würde, dann wäre dein Name CCAuto. Auto war ein beliebiges, aber fest gewähltes Beispiel. Ich hätte auch Hund, Katze, Foo oder Bar nehmen können. Entscheidend ist, dass du ein C davor packst. Das hat mit Philosophie nichts zu tun.

    Wenn das so ist, heissen in Zukunft alle getter-Methoden statt getBla nur noch gBla denn "et" ist ja überflüssig! Hmmm, genau so ergibt das Sinn.

    Darum geht es überhaupt nicht. Denk bitte doch erst mal nach. Dein Präfix ergänzt den Namen um eine Typinformation. Und die ist überflüssig. Was um Himmels willen hat das mit get vs. g zu tun?

    Und damit brauchen wir eigentlich auch gar keine sprechenden Namen mehr, denn die sind ja überflüssig!

    Oh. Bitte. Halt den Mund, wenn du nichts zu sagen hast. Aber dreh mir nicht krampfhaft das Wort im Munde rum. Ich bin der letzte, der gegen sprechende Namen ist. Und wenn du meinen Beitrag liest, dann solltest du feststellen, dass ich mich eher für als gegen sprechende Namen ausgesprochen habe.

    Gebrauchen wir doch am besten nur noch Abkürzungen. _Arh und Iks_tk sind natürlich wesentlich besser zu lesen als ganze Worte!

    Es wird lächerlich.

    Oder besser noch - wir fallen zurück in C-Zeiten und benennen alles mit Zahlen!

    Auch in C-Zeiten konnte man Variablen und Typen nicht mit Zahlen benennen.
    Es wird immer schlimmer.

    Juhu Lesbarkeit ist doch eh sinnlos es geht ja schliesslich um Verhalten und das sehen wir ja in der Doku! 😮 😮 😮

    Geh spielen.

    Wir können gerne diskutieren, das setzt aber drei Dinge voraus:
    a) Du liest die Beiträge des anderen
    b) Du verstehst sie oder fragst ansonsten nach
    c) Du hast eine minimale Ahnung worum es geht



  • ergänzend zu Humes Beitrag

    _Arh und Iks_tk sind natürlich wesentlich besser zu lesen als ganze Worte!

    CAuto ist auch ein sehr sprechender Name 🙄

    Wenn dann bitte ClassAuto oder noch besser Auto_is_a_Class. Damit man die Klasse besser benutzen kann, könntest du noch angeben, was die Header Datei ist

    Auto_is_a_Class_from_header_auto_h



  • Ja und jetzt solltest du mal versuchen mein Posting zu verstehen anstatt beleidigend zu werden.
    Dir würde sicher auffallen, dass ich meine Missbilligung bzgl. immer wiederkehrender (und deshalb nicht sinnvoller werdender) Kommentare bzgl. Bezeichner-Verwendung zum Ausdruck zu bringen.
    Ich sehe deshalb keinerlei Grund sich angegriffen zu fühlen bzw. andere anzugreifen. Also, eine Bitte, lass es. Fachwissen ist eine Sache. Wie jemand seinen Code formatiert, eine ganz andere. Wie gross auch dein Fachwissen in Sachen OO, C++ und anderem ist, brauchst du nicht versuchen aus deinem Geschmack bzgl. Quelltext-Formatierung einen Standard zu machen!

    Du sprichst hier von unnützen Präfixen und ich wollte dir zeigen wie man mit diesem Ansatz weiter verfahren kann. Da ist nichts lächerliches oder sonstwas.
    Ja in C konnte man keine Bezeichner, nur aus Zahlen bestehend, verwenden. Da setzt man dann einen kleinen Buchstaben davor und es geht. Das macht das ganze nicht sinnvoller und eigentlich eher zum Horror weil es streckenweise so gemacht wurde. Das sollte dir klar sein.

    Denk mal drüber nach: in der realen Welt fahren Autos herum und ich programmiere mit Klassen die z.B. ein Auto abbilden. Ist es wirklich soweit her das C davor zu setzen?

    Also nochmal. Bevor du jetzt wieder wild Beschimpfungen auspackst, beruhig dich und führ dir vor Augen, dass dich hier niemand angreift.
    Es geht lediglich darum, das die werten Herren Moderatoren oder andere "Profis" nicht ständig mit diesem Bezeichner-Blödsinn ankommen sollen. Es nervt einfach und ist vollkommen sinnlos. Wie gesagt, dann könnten wir auch über Kommentare und Einrückungen, syntaktische Klammern und ähnlichen Quark diskutieren.



  • kingruedi schrieb:

    ergänzend zu Humes Beitrag

    _Arh und Iks_tk sind natürlich wesentlich besser zu lesen als ganze Worte!

    CAuto ist auch ein sehr sprechender Name 🙄

    Wenn dann bitte ClassAuto oder noch besser Auto_is_a_Class. Damit man die Klasse besser benutzen kann, könntest du noch angeben, was die Header Datei ist

    Auto_is_a_Class_from_header_auto_h

    Naja, ich würde mal denken CAuto ist sprechend.
    Klar, weitergeführt ergibt die Bennenung mit allem möglichen Kram davor keinen Sinn. Aber deshalb steht ja auch nur ein C davor und nix anderes. Ich hab mir das so angewöhnt und finde es auch gut. Ich finde dabei auch ungarische Notation recht nützlich.
    Ist das ein Verbrechen? Oder ein Problem?

    Und ich frag dich, was ist besser wenn du irgendwelchen fremden Quellcode anschaust - wenn alle Bezeichner keinerlei Richtlinie folgen und wild irgendwie aussehen oder wenn gewisse Konventionen existieren?



  • Und ich frag dich, was ist besser wenn du irgendwelchen fremden Quellcode anschaust - wenn alle Bezeichner keinerlei Richtlinie folgen und wild irgendwie aussehen oder wenn gewisse Konventionen existieren?

    Entschuldigung aber du kommst für mich auf die Liste der merkbefreiten.
    Die Missbilligung eines C-Präfix ist *nicht* gleichbedeutend mit Bezeichnungs-Anarchie. Auch wir nicht C-Präfix-Verwender benutzen klare Konventionen.

    Ich finde dabei auch ungarische Notation recht nützlich.
    Ist das ein Verbrechen? Oder ein Problem?

    Nein und Jein.
    Die ungarische Notation ist nur unpassend im Zusammenhang mit C++.

    Wie gross auch dein Fachwissen in Sachen OO, C++ und anderem ist, brauchst du nicht versuchen aus deinem Geschmack bzgl. Quelltext-Formatierung einen Standard zu machen!

    Versuche ich nicht. Ich weise nur auf gängie Praxis hin. Und Vor- und Nachteile wurden in anderen Threads bereits ausführlich besprochen. Eine Suche in einschlägigen C++ Newsgroups ist auch immer wieder hilfreich.

    Du sprichst hier von unnützen Präfixen und ich wollte dir zeigen wie man mit diesem Ansatz weiter verfahren kann. Da ist nichts lächerliches oder sonstwas.

    Doch in der Tat. Mein "unnütz" hatte einen Kontext. Wenn du es aus diesem herausreißt und dann auf einmal von Elefanten faselst, dann ist das lächerlich. Oder zumindest sehr sehr unproduktiv.

    Bevor du jetzt wieder wild Beschimpfungen auspackst

    Wo genau habe ich dich beschimpft?

    Wie gesagt, dann könnten wir auch über Kommentare und Einrückungen, syntaktische Klammern und ähnlichen Quark diskutieren.

    Ne lass mal. Mit dir zu diskutieren ist völlig unproduktiv.



  • Drakos schrieb:

    Naja, ich würde mal denken CAuto ist sprechend.

    Naja, für die die aus der M$ Compilerwelt kommen schon. Und für den Rest ist es einfach nur irgendein Buchstabe davor.

    Wie wärs denn mit dem Argument ? :

    Da der "normale" Programmierer seine Klassen Auto Fahrzeug KeineAhnung was nennt haben viele Hersteller halt ein Buchstaben davor gesetzt um Namensprobleme zu reduzieren.

    Mag aber weit hergeholt sein O🤡



  • Ich persönlich lasse Variablennamen und Objekte immer mit einem kleinen Buchstaben anfangen. Klassennamen dagegen schreibe ich groß, genauso wie die Namen von Funktionen.

    Bsp.:

    const int KAPUTT = 1;
    Auto meinAuto;

    meinAuto.GetThisValue();
    meinAuto.SetThisValue();
    meinAuto.reifen = KAPUTT;
    meinAuto.SelfDestruct();

    ungarische Notation braucht man in C++ wirklich nicht.



  • Ich versteh deine Argumentation überhaupt nicht mehr. Meinetwegen benutz doch C als Präfix, du kannst vor deine Klassennamen schreiben was du willst. Sogar den Namen deines verstorbenen Wellensittich, wenn du glaubst, dass man dadurch 1. sehen kann, dass es sich um eine Klasse handelt und 2. dass dieses Wissen jemanden etwas nützt.

    Mein Tipp mit dem C als Präfix war eben nur dazu gedacht, wenn du jemand bist, der auch mal auf die Argumentation anderer hört und nicht gleich rumbrüllen muss.

    Warum sollte ich durch ein C vor einem Namen mehr erkennen, dass es sich um eine Klasse handelt? In dem Punkt hast du doch selbst gesagt, dass gXY nicht eindeutig als get Methode für XY zu verstehen ist.

    Was denkst du bringt dir das wissen, darüber ob es sich um eine Klasse handelt? Das C wurde wie gesagt von MS benutzt (Borland nahm eben T) um Namenskonflikte zu vermeiden, in einer Zeit als C++ noch keine Namespaces hatte. Die konnten ja nich wissen, dass jeder 2. C++ Anfänger gleich denken muss "oh oh ein C Präfix steht für eine Klasse" und das kopieren mussten.

    Wenn ich

    Auto foo;
    

    schreibe, dann weiss ich doch, dass Auto irgend eine Klasse oder so was ist, spätestens bei der ersten Benutzung. Im Endeffekt werd ich ja eh in die Doku schauen, was Auto für ein Interface hat etc. Spätestens dann werd ich ja sehen ob Auto nicht doch ein typedef auf ein int ist 😉

    Also fasse ich zusammen:

    1. C ist kein eindeutiges Präfix (genauso eindeutig wie ein g für eine get Methode um auf dein Beispiel zurückzukommen)
    2. das Wissen ob es sich bei Auto um eine Klasse handelt ist nicht nötig. Es geht nur darum, dass man weiss was es wie tut und das erfährt man durch das Prefix nicht
    3. ein C vor einer Klasse sorgt nicht dafür (sondern arbeitet eher dagegen), dass man sinnvolle Typnamen nimmt. Cw ist genausomöglich wie w als Klassenname. Das ändert nichts an der Situation.



  • Na Hume was wäre für dich denn produktiv? In diesem Fall doch nur, dass ich sage: ja, amen.
    Schau mal, ich mache das so schon seit ich mit Klassen programmiere weil es für mich nützlich ist. Bei mir auf Arbeit wird das ganze genauso gehandhabt. Also ist es wenigstens dort gängig. Das dann in regelmässigen Abständen einer (in diesem Forum) daherkommt und mir sagt, dass des Mist ist weil er davon üerzeugt ist, dass es Mist ist, ist zwar für ihn schön und für mich informativ aber auf dauer nervend und sinnlos. Es gab schon massenhaft solcher Threads und geendet haben sie alle gleich!
    Ich glaube langsam, dass du das einfach nicht merkst. Wenn du auch nicht merkst wann du beleidigend wirst, ist das schon der zweite Punkt den du nicht merkst. Unterstrichen wird das noch von einer ordentlichen Portion Ignoranz. Denn auf Argumente die ich anbrachte weshalb _ich_ das so mache und auch dabei bleibe, gehst du gar nicht ein. Hast du mal bemerkt, dass die Namenskonventionen von denen ich sprach genau diese hier sind?
    Man komm runter von deinem hohen Ross! Ich bin weder merkbefreit, noch fasel oder sonst irgendwas. Kommentare wie "geh spielen" zeugen von absolut keinem Niveau,auch wenn du so tust als ob du hier der grosse Chef bist. Sowas disqualifiziert dich. Und noch vielmehr, dass du es nicht mal merkst.

    Aber vielleicht sollte ich was anderes tun: Ja Hume, du bist der Meister, du weisst über _alles_ am besten Bescheid. Nur du weisst wer was, wie zu schreiben, zu formatieren und überhaupt zu tun hat. Ich nenne dich ab jetzt meinen Übervater, denn ich bin dumm in deinem Glanze.

    Hume, fachlich hast du wirklich viel drauf. Aber das was du ausser dem noch hier im Forum zeigst, ist unter aller Sau. Von Zeit zu zeit scheint es dich immermal zu packen und dann geht es völlig mit dir durch. Und wenn du das echt nicht verstehst, dann kann ich dir nicht weiter helfen.
    Ich wäre dir im übrigen dankbar wenn du deine Verbalinjurien jetzt für dich behalten könntest und deine Ignoranz dafür verwenden könntest, einfach diesen Thread hier zu ignorieren.

    @Knuddlbaer: Ich habe noch nie mit der MFC programmiert und bin auch nicht dadurch auf diese Namenskonvention bzgl. Klassen gekommen. Ich weiss nicht mehr wie ich dazu kam aber ich finde es gut.



  • @kingruedi: Ich gehe schon auf Argumentation ein aber wo bitte ist bei

    (btw. sollte man kein C als Prefix für Klassennamen benutzen)

    Argumentation?
    Ich bitte zur Kenntnis zu nehmen, dass ich nur gesagt habe, das diese Belehrungen bzgl. Bezeichnerwahl überaus nervend sind, weil es doch Geschmackssache ist.
    Und auch für dich nochmal -> ich habe noch nie mit der MFC programmiert und den C Präfix auch nicht daher.
    Ich benutze auch sehr gern ungarische Notation und finde es gut, wenn ich sehe was ich vor mir habe, ohne erst in Doku schauen zu müssen.
    Ja in einer idealen Welt ist das vielleicht überflüssig aber die haben wir nicht. Deshalb gibt es auch mal schlecht kommentierten Quellcode (und wenn es nur mein eigener ist den ich mir nach 5 Monaten nochmal anschaue). Und da fällt es _MIR_ leichter, die Bezeichner gleich richtig zu deuten. Geht für mich halt schneller. Meine Sache.
    Und irgendwie (klar kommt des von meiner Reaktion) enden doch aber solche Diskussionen immer gleich. Deshalb können doch auch solche Kommentare gleich wegbleiben, oder?



  • Tatsache ist, dass du bei halbwegs modernen Entwicklungsumgebungen eigentlich die Definition einer Variable angezeigt bekommen müsstest, wenn du z.B. mit der Maus darüber fährst.

    Und Tatsache ist nun mal auch, dass auf den Unis ganz bewusst nicht ungarische Notation gelehrt wird.

    Tatsächlich ist es völlig wurscht, wie du es für dich machst, das geht eigentlich keinen was an. Und wenn das in deiner Firma so gemacht wird, schön. Aber ich denke nicht, dass es woanders noch im großen Stil üblich ist. Wie du an meinen Beispielen (oben) sehen kannst, habe ich kein Problem damit, zu erkennen, dass Auto eine Klasse ist.



  • Klar, glaub ich dir auch. Wie gesagt, fällt es mit halt leichter, auch bei grösseren Projekten mit Hilfe von ungarischer Notation durchzublicken.

    Wo studierst du? Bei uns wird auf Notationen im Stoff überhaupt nicht eingegangen. Die tun sich schon schwer von Pascal wegzukommen. 😮



  • Drakos
    das "btw." war keine Argumentation, sondern ein Hinweis. Die Argumentation folgte später.

    Ja in einer idealen Welt ist das vielleicht überflüssig aber die haben wir nicht

    ich weiss nicht wie du programmierst, aber ich kann mir die Header und Klassen deklarationen angucken, selbst wenn das Programm keine Dokumentation oder nur irgend einen Kommentar hat.

    Was bringt es dir zu wissen, dass Auto eine Klasse ist?

    enden doch aber solche Diskussionen immer gleich

    nein eigentlich nicht, bisher habe ich schon erlebt, dass Leute eingesehen haben, dass C als Präfix nichts bringt. Das waren die Leute dir idr. die Argumentation gelesen haben

    Deshalb können doch auch solche Kommentare gleich wegbleiben, oder?

    öhm, Nein. Wieso? Es hätte ja sein können, dass du nicht ein so verbissener Mensch bist, der vielleicht dadurch was gelernt hatte.



  • Ähhm, lies dir doch bitte nochmal die Posts durch und vor allem die erste Antwort von Hume. Die einzigen Argumente die kamen waren
    a) die Präfixe sind unnötig
    b) die Präfixe sind unüblich
    c) in der realen Welt haben Dinge auch kein extra Präfix.

    Da kann ich keinen wirklichen Grund erkennen weshalb ich das bei mir ändern sollte. Es gibt genug Dinge die für mich dagegen sprechen und keinen wirklich sinnvollen Grund also ist die Wahl doch logisch!



  • also ich lese da mehr Dinge. Naja, mach das mit den Präfixen wie du willst, die Diskussion ist eh Sinnlos. Du willst wohl nicht die Beiträge vernünftig lesen, sondern nur rumpöbeln.


Anmelden zum Antworten