<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Fehler bei einer Klassenmethode]]></title><description><![CDATA[<p>... und ich sehe verflixt nicht warum.</p>
<p>Hallo,</p>
<p>ich arbeite mich gerade durch das Thema Klassen und habe mir dazu eine kleine Übung gemacht. Alles lief auch gut, bis ich die Klassenmethode 're_nutzung_01' eingeführt habe. Diese soll mir einfach nur einen string zurückgeben.</p>
<p>Die Fehlermeldung:</p>
<pre><code>g++ -Wall -o flieger *.cpp *.h
flieger.cpp:20: error: no ‘char* Flieger::re_nutzung_01()’ member function declared in class ‘Flieger’
flieger.cpp: In member function ‘void Flieger::print_flieger()’:
flieger.cpp:39: error: ‘re_nutzung_01’ was not declared in this scope
Kompilierung fehlgeschlagen.
</code></pre>
<p>Wenn ich das so richtig interpretiere, dann will mir g++ sagen, dass die benannte Funktion nicht deklariert ist, aber das ist sie meines Erachtens in der flieger.h doch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Hier der Code mit den entscheidenden Abschnnitten:</p>
<pre><code class="language-cpp">//flieger.cpp
#include &quot;flieger.h&quot;
#include &quot;debug.h&quot;

#include &lt;iostream&gt;
#include &lt;cstring&gt;

using namespace std;

//// Konstruktoren ////

// Standardkonstruktor
Flieger::Flieger () {...}

// Ellipse
void Flieger::create (...) {...}  

//// Methoden ////

char* Flieger::re_nutzung_01(void)
{
    switch(nutzung_01)      // Variablenzugriff in einer Klasse
    {
        case 0: return &quot;zivil&quot;;
        case 1: return &quot;militaerisch&quot;;
    }
}

// einmal alles ausgeben
void Flieger::print_flieger (void)
{
    cout &lt;&lt; &quot;Hersteller: &quot; &lt;&lt; hersteller &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Typenbezeichnung: &quot; &lt;&lt; typenbezeichnung &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Registratur: &quot; &lt;&lt; registratur &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Tonnage: &quot; &lt;&lt; tonnage &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Spannweite: &quot; &lt;&lt; spannweite &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Geschwindigkeit: &quot; &lt;&lt; geschwindigkeit &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Besatzung: &quot; &lt;&lt; besatzung &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Nutzung: &quot; &lt;&lt; re_nutzung_01() &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>und</p>
<pre><code class="language-cpp">//flieger.h
#ifndef _FLIEGER_H_
#define _FLIEGER_H_

#include &quot;debug.h&quot;

#define _NA_ &quot;NA&quot;

using namespace std;

class Flieger
{
public:
    enum Nutzung_01 {ZIVIL, MILITAER};
    enum Nutzung_02 {FRACHT, PASSAGIER, PRIVAT, EINSATZ, FORSCHUNG}; 

private:
    unsigned int besatzung;
    unsigned int tonnage;
    unsigned int geschwindigkeit;
    unsigned int spannweite;
    unsigned int nutzung_01;
    unsigned int nutzung_02;
    char registratur[7];
    char hersteller[20];
    char typenbezeichnung[20];

    //gibt die entspechenden char-Strings zurück
    char* re_nutzung_01(void);

public:
    // Standardkonstruktor
    Flieger();
    // Parameterfehler
    void create (...);
    // einmal alles ausgeben
    void print_flieger (void);
};

#endif
</code></pre>
<p>- habe das mit dem Buch verglichen und konnte nichts feststellen<br />
- mit der Methode als public ging es auch nicht</p>
<p>Wer kann mir helfen???</p>
<p>Vielen Dank schon mal im Vorraus<br />
Gruß<br />
Alex</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284364/fehler-bei-einer-klassenmethode</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 00:19:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284364.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Mar 2011 22:31:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Wed, 30 Mar 2011 22:34:48 GMT]]></title><description><![CDATA[<p>... und ich sehe verflixt nicht warum.</p>
<p>Hallo,</p>
<p>ich arbeite mich gerade durch das Thema Klassen und habe mir dazu eine kleine Übung gemacht. Alles lief auch gut, bis ich die Klassenmethode 're_nutzung_01' eingeführt habe. Diese soll mir einfach nur einen string zurückgeben.</p>
<p>Die Fehlermeldung:</p>
<pre><code>g++ -Wall -o flieger *.cpp *.h
flieger.cpp:20: error: no ‘char* Flieger::re_nutzung_01()’ member function declared in class ‘Flieger’
flieger.cpp: In member function ‘void Flieger::print_flieger()’:
flieger.cpp:39: error: ‘re_nutzung_01’ was not declared in this scope
Kompilierung fehlgeschlagen.
</code></pre>
<p>Wenn ich das so richtig interpretiere, dann will mir g++ sagen, dass die benannte Funktion nicht deklariert ist, aber das ist sie meines Erachtens in der flieger.h doch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Hier der Code mit den entscheidenden Abschnnitten:</p>
<pre><code class="language-cpp">//flieger.cpp
#include &quot;flieger.h&quot;
#include &quot;debug.h&quot;

#include &lt;iostream&gt;
#include &lt;cstring&gt;

using namespace std;

//// Konstruktoren ////

// Standardkonstruktor
Flieger::Flieger () {...}

// Ellipse
void Flieger::create (...) {...}  

//// Methoden ////

char* Flieger::re_nutzung_01(void)
{
    switch(nutzung_01)      // Variablenzugriff in einer Klasse
    {
        case 0: return &quot;zivil&quot;;
        case 1: return &quot;militaerisch&quot;;
    }
}

// einmal alles ausgeben
void Flieger::print_flieger (void)
{
    cout &lt;&lt; &quot;Hersteller: &quot; &lt;&lt; hersteller &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Typenbezeichnung: &quot; &lt;&lt; typenbezeichnung &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Registratur: &quot; &lt;&lt; registratur &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Tonnage: &quot; &lt;&lt; tonnage &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Spannweite: &quot; &lt;&lt; spannweite &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Geschwindigkeit: &quot; &lt;&lt; geschwindigkeit &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Besatzung: &quot; &lt;&lt; besatzung &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Nutzung: &quot; &lt;&lt; re_nutzung_01() &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>und</p>
<pre><code class="language-cpp">//flieger.h
#ifndef _FLIEGER_H_
#define _FLIEGER_H_

#include &quot;debug.h&quot;

#define _NA_ &quot;NA&quot;

using namespace std;

class Flieger
{
public:
    enum Nutzung_01 {ZIVIL, MILITAER};
    enum Nutzung_02 {FRACHT, PASSAGIER, PRIVAT, EINSATZ, FORSCHUNG}; 

private:
    unsigned int besatzung;
    unsigned int tonnage;
    unsigned int geschwindigkeit;
    unsigned int spannweite;
    unsigned int nutzung_01;
    unsigned int nutzung_02;
    char registratur[7];
    char hersteller[20];
    char typenbezeichnung[20];

    //gibt die entspechenden char-Strings zurück
    char* re_nutzung_01(void);

public:
    // Standardkonstruktor
    Flieger();
    // Parameterfehler
    void create (...);
    // einmal alles ausgeben
    void print_flieger (void);
};

#endif
</code></pre>
<p>- habe das mit dem Buch verglichen und konnte nichts feststellen<br />
- mit der Methode als public ging es auch nicht</p>
<p>Wer kann mir helfen???</p>
<p>Vielen Dank schon mal im Vorraus<br />
Gruß<br />
Alex</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2042582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042582</guid><dc:creator><![CDATA[Alex44]]></dc:creator><pubDate>Wed, 30 Mar 2011 22:34:48 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Wed, 30 Mar 2011 23:09:58 GMT]]></title><description><![CDATA[<p>Vermutlich hast du einen Tippfehler in deinem Code. Was du hier gepostet hast sieht OK aus, aber was du hier gepostet hast ist auch bearbeitet worden. Check nochmal deinen Original-Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2042584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042584</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 30 Mar 2011 23:09:58 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 08:48:10 GMT]]></title><description><![CDATA[<p>Wie hustbaer schon sagt, ist der Fehler in dem Code nicht zu finden. Da du aber gerade C++ lernst, noch ein paar Anmerkungen:</p>
<ol>
<li>
<p>*.h hat in dem g++-Aufruf nichts zu suchen. Header werden per #include-Anweisung im Code benutzt</p>
</li>
<li>
<p>Gerade als Anfänger solltest du statt</p>
</li>
</ol>
<pre><code class="language-cpp">char hersteller[20];
</code></pre>
<p>lieber</p>
<pre><code class="language-cpp">std::string hersteller;
</code></pre>
<p>verwenden. Das wird dir noch viel Ärger ersparen und ist der C++-Weg für Strings</p>
<ol start="3">
<li>aus dem gleichen Grund sollte deine Funktion &quot;re_nutzung_01&quot; auch einen std::string zurückgeben</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/2042646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042646</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 31 Mar 2011 08:48:10 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 15:13:30 GMT]]></title><description><![CDATA[<blockquote>
<ol>
<li>*.h hat in dem g++-Aufruf nichts zu suchen. Header werden per #include-Anweisung im Code benutzt</li>
</ol>
</blockquote>
<p>Ja klar - ist ja eigentlich auch logisch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<blockquote>
<ol start="2">
<li>Gerade als Anfänger solltest du statt</li>
</ol>
<pre><code class="language-cpp">char hersteller[20];
</code></pre>
<p>lieber</p>
<pre><code class="language-cpp">std::string hersteller;
</code></pre>
<p>verwenden. Das wird dir noch viel Ärger ersparen und ist der C++-Weg für Strings</p>
</blockquote>
<p>Das mit den Strings kannte ich noch nicht. War vorher nur auf C und da gab es sowas nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Werde mir das aber noch angucken.</p>
<p>Trotzdem kann das ja nicht der Fehler sein....</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Vermutlich hast du einen Tippfehler in deinem Code. Was du hier gepostet hast sieht OK aus, aber was du hier gepostet hast ist auch bearbeitet worden. Check nochmal deinen Original-Code.</p>
</blockquote>
<p>Hier noch mal der gesamte Code. Der ist ja recht übersichtlich (noch).</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#include &quot;flieger.h&quot;
#include &quot;debug.h&quot;

using namespace std;

int main (void)
{
   Flieger flieger_01;

   flieger_01.print_flieger();

   return 0;
}
</code></pre>
<p>flieger.h</p>
<pre><code class="language-cpp">#ifndef _FLIEGER_H_
#define _FLIEGER_H_

#include &quot;debug.h&quot;
#include &lt;cstring&gt;

#define _NA_ &quot;NA&quot;

using namespace std;

class Flieger
{
public:
    enum Nutzung_01 {ZIVIL, MILITAER};
    enum Nutzung_02 {FRACHT, PASSAGIER, PRIVAT, EINSATZ, FORSCHUNG}; 

private:
    unsigned int besatzung;
    unsigned int tonnage;
    unsigned int geschwindigkeit;
    unsigned int spannweite;
    unsigned int nutzung_01;
    unsigned int nutzung_02;
    char registratur[7];
    char hersteller[20];
    char typenbezeichnung[20];

    //gibt die entspechenden char-Strings zurück
    char* re_nutzung_01(void);

public:
    // Standardkonstruktor
    Flieger();
    // Parameterfehler
    void create (...);
    // einmal alles ausgeben
    void print_flieger (void);
};

#endif
</code></pre>
<p>flieger.cpp</p>
<pre><code class="language-cpp">#include &quot;flieger.h&quot;
#include &quot;debug.h&quot;

#include &lt;iostream&gt;
#include &lt;cstring&gt;

using namespace std;

//// Konstruktoren ////

// Standardkonstruktor
Flieger::Flieger ()
{
    besatzung = 0;
    tonnage = 0;
    geschwindigkeit = 0;
    spannweite = 0;
    nutzung_01 = 0;
    nutzung_02 = 0;
    strncpy(registratur,&quot;D-XXXX&quot;,sizeof(registratur)-1);
    registratur[sizeof(registratur)] = '\0';
    strncpy(hersteller,_NA_,sizeof(hersteller)-1);
    hersteller[sizeof(hersteller)] = '\0';
    strncpy(typenbezeichnung,_NA_,sizeof(typenbezeichnung)-1);
    typenbezeichnung[sizeof(typenbezeichnung)] = '\0';
}

// Ellipse (Parameterfehler)
void Flieger::create (...)
{
    cout &lt;&lt; &quot;Parameterfehler - es konnte kein Objekt 'Flieger' erstellt werden \n&quot;;
}  

//// Methoden ////

char* Flieger::re_nutzung_01(void)
{
    switch(nutzung_01)      // Variablenzugriff in einer Klasse
    {
        case 0: return &quot;zivil&quot;;
        case 1: return &quot;militaerisch&quot;;
    }
}

// einmal alles ausgeben
void Flieger::print_flieger (void)
{
    cout &lt;&lt; &quot;Hersteller: &quot; &lt;&lt; hersteller &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Typenbezeichnung: &quot; &lt;&lt; typenbezeichnung &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Registratur: &quot; &lt;&lt; registratur &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Tonnage: &quot; &lt;&lt; tonnage &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Spannweite: &quot; &lt;&lt; spannweite &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Geschwindigkeit: &quot; &lt;&lt; geschwindigkeit &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Besatzung: &quot; &lt;&lt; besatzung &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Nutzung: &quot; &lt;&lt; re_nutzung_01() &lt;&lt; &quot;\n&quot;;     // hier muss noch das Objekt davor ?!?!?!?!
}
</code></pre>
<p>debug.h</p>
<pre><code class="language-cpp">#ifndef _DEBUG_h_
#define _DEBUG_H_

#define DEBUG cout&lt;&lt;&quot;Aktuell:_&quot;&lt;&lt;__FUNCTION__&lt;&lt;&quot;_&quot;__LINE__&lt;&lt;&quot;\n&quot;;

#endif
</code></pre>
<p>und noch mal der Fehler</p>
<blockquote>
<p>g++ -Wall -o flieger <em>.cpp<br />
flieger.cpp:36: error: no ‘char</em> Flieger::re_nutzung_01()’ member function declared in class ‘Flieger’<br />
flieger.cpp: In member function ‘void Flieger::print_flieger()’:<br />
flieger.cpp:55: error: ‘re_nutzung_01’ was not declared in this scope<br />
Kompilierung fehlgeschlagen.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2042818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042818</guid><dc:creator><![CDATA[Alex44]]></dc:creator><pubDate>Thu, 31 Mar 2011 15:13:30 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 15:40:08 GMT]]></title><description><![CDATA[<p>Auf den ersten Blick ist das alles richtig. Kann es atm leider nicht in meiner IDE testen, schon versucht alle temporären dateien für das projekt mal zu löschen?</p>
<p>Das einzige was ich mir momentan vorstellen könnte ist, das</p>
<pre><code class="language-cpp">#define _NA_ &quot;NA&quot;
</code></pre>
<p>zusammen mit</p>
<pre><code class="language-cpp">#include &quot;flieger.h&quot;
#include &quot;debug.h&quot;
</code></pre>
<p>ein problem machen könnte - hab allerdings ka wofür das define überhaupt ist. In ner Stunde oder so schau ichs mir mal genauer an, wenn das Problem dann noch besteht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2042826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042826</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Thu, 31 Mar 2011 15:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 15:41:09 GMT]]></title><description><![CDATA[<p>Ach, die debug.h hast du ja auch angegeben.. na dann, vergiss meinen zweiten Absatz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2042828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042828</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Thu, 31 Mar 2011 15:41:09 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 16:39:14 GMT]]></title><description><![CDATA[<p>kleiner Troll schrieb:</p>
<blockquote>
<p>Auf den ersten Blick ist das alles richtig. Kann es atm leider nicht in meiner IDE testen, schon versucht alle temporären dateien für das projekt mal zu löschen?</p>
</blockquote>
<p>Da hat sich tatsache was getan:</p>
<p>Compiler schrieb:</p>
<blockquote>
<p>g++ -Wall -o flieger <em>.cpp<br />
flieger.cpp: In member function ‘char</em> Flieger::re_nutzung_01()’:<br />
flieger.cpp:41: warning: deprecated conversion from string constant to ‘char*’<br />
flieger.cpp:42: warning: deprecated conversion from string constant to ‘char*’<br />
flieger.cpp:44: warning: control reaches end of non-void function<br />
Kompilierung erfolgreich beendet.</p>
</blockquote>
<p>Aber das Ergebnis ist mir immernoch unlogisch.</p>
<p>kleiner Troll schrieb:</p>
<blockquote>
<p>Das einzige was ich mir momentan vorstellen könnte ist, das</p>
<pre><code class="language-cpp">#define _NA_ &quot;NA&quot;
</code></pre>
</blockquote>
<p>Der Spaß ist auch nur zur Übung... Er soll es ermöglichen schnell &quot;NA&quot; durch z.B. &quot;unbekannt&quot; zu ersetzen. Ist aber nicht wichtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2042843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042843</guid><dc:creator><![CDATA[Alex44]]></dc:creator><pubDate>Thu, 31 Mar 2011 16:39:14 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 16:48:11 GMT]]></title><description><![CDATA[<p>Das Ergebnis ist wiederum nicht unlogisch. &quot;zivil&quot; und &quot;militaerisch&quot; sind vom typ const char*, du gibst aber nur char* zurück. Ist mir nicht aufgefallen, aber überrascht mich ein bißchen, dass es sogar geht. Zugegebenermaßen ist das wegen C kompabilität durchaus logisch.</p>
<p>Normalerweise wenn du versuchst einen const typ in einen nicht-const typ umzuwandeln gibts einen compilerfehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2042848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042848</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Thu, 31 Mar 2011 16:48:11 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 16:52:10 GMT]]></title><description><![CDATA[<p>Noch ein nachtrag: &quot;control reaches end of non-void function &quot; ist ein problem, weil du für den Fall das der switch kein &quot;0&quot; oder &quot;1&quot; findet einfach durchfällt, und was macht er dann? Er hat ja keine Anweisung, was er returnen soll.</p>
<p>Du kannst dir btw das (void) bei funktionen für die parameter hinten in c++ sparen, und verwende wenns geht keine defines die mit einem unterstrich beginnen, defines dieser art und weise werden von der Implementierung der stl verwendet und sind also reserviert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2042850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042850</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Thu, 31 Mar 2011 16:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 17:12:55 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#ifndef _DEBUG_h_ // &lt;-- das sind nicht die gleichen Makronamen!
#define _DEBUG_H_
</code></pre>
<p>Außerdem darfst du dem Standard nach diese Bezeichner eh nicht verwenden - alles, was mit <em>[A-Z] anfängt, ist für die Implementation reserviert, ebenso wie alles, was __ (zwei Unterstriche) irgendwo im Namen hat. Zusätzlich ist im globalen Namensraum alles reserviert, was mit einem Unterstrich beginnt. Ob sich speziell diese Makros mit deiner Implementation beißen, kann ich aus der Entfernung nicht sagen, ich halte es aber für möglich - gerade bei _DEBUG_H</em> und _NA_.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2042871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042871</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 31 Mar 2011 17:12:55 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 17:48:32 GMT]]></title><description><![CDATA[<p>hey super - es funktioniert. Dann kann es endlich auch weiter gehen</p>
<p>kleiner Troll schrieb:</p>
<blockquote>
<p>Das Ergebnis ist wiederum nicht unlogisch. &quot;zivil&quot; und &quot;militaerisch&quot; sind vom typ const char*, du gibst aber nur char* zurück. Ist mir nicht aufgefallen, aber überrascht mich ein bißchen, dass es sogar geht. Zugegebenermaßen ist das wegen C kompabilität durchaus logisch.</p>
<p>Normalerweise wenn du versuchst einen const typ in einen nicht-const typ umzuwandeln gibts einen compilerfehler.</p>
</blockquote>
<p>Wusste nicht, dass C++ da so penibel ist. In C ist bei mir das const so gut wie nie zu finden... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>kleiner Troll schrieb:</p>
<blockquote>
<p>Noch ein nachtrag: &quot;control reaches end of non-void function &quot; ist ein problem, weil du für den Fall das der switch kein &quot;0&quot; oder &quot;1&quot; findet einfach durchfällt, und was macht er dann? Er hat ja keine Anweisun <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> g, was er returnen soll.</p>
</blockquote>
<p>das lässt sich beheben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>kleiner Troll schrieb:</p>
<blockquote>
<p>Du kannst dir btw das (void) bei funktionen für die parameter hinten in c++ sparen, und verwende wenns geht keine defines die mit einem unterstrich beginnen, defines dieser art und weise werden von der Implementierung der stl verwendet und sind also reserviert.</p>
</blockquote>
<p>&amp;@seldon<br />
Ok, macht Sinn. Nur doof, dass die Beispiele im Buch so sind. Aber ich werde es beherzigen. Kann ja sein, dass man trotzdem mal nen Treffer hat. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Damit danke - war sehr lehr-&amp;hilfreich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Gruß<br />
Alex</p>
<p>PS: der korrigierte Code:</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#include &quot;flieger.h&quot;
#include &quot;debug.h&quot;

using namespace std;

int main (void)
{
   Flieger flieger_01;

   flieger_01.print_flieger();

   return 0;
}
</code></pre>
<p>flieger.h</p>
<pre><code class="language-cpp">#ifndef FLIEGER_H
#define FLIEGER_H

#include &quot;debug.h&quot;
#include &lt;cstring&gt;

#define MNA &quot;NA&quot;

using namespace std;

class Flieger
{
public:
    enum Nutzung_01 {ZIVIL, MILITAER};
    enum Nutzung_02 {FRACHT, PASSAGIER, PRIVAT, EINSATZ, FORSCHUNG}; 

private:
    unsigned int besatzung;
    unsigned int tonnage;
    unsigned int geschwindigkeit;
    unsigned int spannweite;
    unsigned int nutzung_01;
    unsigned int nutzung_02;
    char registratur[7];
    char hersteller[20];
    char typenbezeichnung[20];

    //gibt die entspechenden char-Strings zurück
    const char* re_nutzung_01(void);

public:
    // Standardkonstruktor
    Flieger();
    // Parameterfehler
    void create (...);
    // einmal alles ausgeben
    void print_flieger (void);
};

#endif
</code></pre>
<p>flieger.cpp</p>
<pre><code class="language-cpp">#include &quot;flieger.h&quot;
#include &quot;debug.h&quot;

#include &lt;iostream&gt;
#include &lt;cstring&gt;

using namespace std;

//// Konstruktoren ////

// Standardkonstruktor
Flieger::Flieger ()
{
    besatzung = 0;
    tonnage = 0;
    geschwindigkeit = 0;
    spannweite = 0;
    nutzung_01 = 0;
    nutzung_02 = 0;
    strncpy(registratur,&quot;D-XXXX&quot;,sizeof(registratur)-1);
    registratur[sizeof(registratur)] = '\0';
    strncpy(hersteller,MNA,sizeof(hersteller)-1);
    hersteller[sizeof(hersteller)] = '\0';
    strncpy(typenbezeichnung,MNA,sizeof(typenbezeichnung)-1);
    typenbezeichnung[sizeof(typenbezeichnung)] = '\0';
}

// Ellipse (Parameterfehler)
void Flieger::create (...)
{
    cout &lt;&lt; &quot;Parameterfehler - es konnte kein Objekt 'Flieger' erstellt werden \n&quot;;
}  

//// Methoden ////

const char* Flieger::re_nutzung_01(void)
{
    switch(nutzung_01)      // Variablenzugriff in einer Klasse
    {
        case 0: return &quot;zivil&quot;;
        case 1: return &quot;militaerisch&quot;;
    }
    return &quot;huhu&quot;;  // damit der Compiler glücklich ist
}

// einmal alles ausgeben
void Flieger::print_flieger (void)
{
    cout &lt;&lt; &quot;Hersteller: &quot; &lt;&lt; hersteller &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Typenbezeichnung: &quot; &lt;&lt; typenbezeichnung &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Registratur: &quot; &lt;&lt; registratur &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Tonnage: &quot; &lt;&lt; tonnage &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Spannweite: &quot; &lt;&lt; spannweite &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Geschwindigkeit: &quot; &lt;&lt; geschwindigkeit &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Besatzung: &quot; &lt;&lt; besatzung &lt;&lt; &quot;\n&quot;;
    cout &lt;&lt; &quot;Nutzung: &quot; &lt;&lt; re_nutzung_01() &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>debug.h</p>
<pre><code class="language-cpp">#ifndef DEBUG_H
#define DEBUG_H

#define DEBUG cout&lt;&lt;&quot;Aktuell:_&quot;&lt;&lt;__FUNCTION__&lt;&lt;&quot;_&quot;__LINE__&lt;&lt;&quot;\n&quot;;

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2042903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042903</guid><dc:creator><![CDATA[Alex44]]></dc:creator><pubDate>Thu, 31 Mar 2011 17:48:32 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 17:59:13 GMT]]></title><description><![CDATA[<p>__PRETTY_FUNCTION__ (linux,gcc) unter Kleinweich gibts was ähnliches .. kannste googlen</p>
<p>Gratulation zu deinem Statischen Flieger den du jetzt wie oft gepostet hast? 3 Mal? achja .. das &quot;huhu&quot; könntest du auch durch ein <code>default: return &quot;gibbsNich&quot;;</code> direct im Switch erschlagen und print_flieger durch eine passende Überladung für operator&lt;&lt;() deines Objektes <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> aber das kommt vermutlich in weiteren Kapiteln. Ich hoffe nur da kommen noch getter/setter damit du deinen Flieger ausbauen kannst, trotz netter enums gibts ja zZ nur die eine Variante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2042909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042909</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Thu, 31 Mar 2011 17:59:13 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 18:01:20 GMT]]></title><description><![CDATA[<p>Ich würde dir empfehlen dich über std::string zu erkundigen. Das erspart dir einige Arbeit mit char-pointern, char-arrays und erleichtert das Programmieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2042912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042912</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Thu, 31 Mar 2011 18:01:20 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 18:02:10 GMT]]></title><description><![CDATA[<blockquote>
<p>Wusste nicht, dass C++ da so penibel ist. In C ist bei mir das const so gut wie nie zu finden... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Ich hoffe mal, das is da nie zufinden :&gt;</p>
<p>const gibt's meines wissens in C doch überhaupt nicht. Oder irre ich mich da? Hab nie wirklich mit C gearbeitet. (Man kann übrigens ein const schon mit const_cast wegmachen, aber das sollte man sich wirklich gut überlegen.. ich habs noch nie gebraucht)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2042913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042913</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Thu, 31 Mar 2011 18:02:10 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einer Klassenmethode on Thu, 31 Mar 2011 18:34:29 GMT]]></title><description><![CDATA[<p>const gibt es in C schon, es wird aber im Zusammenhang mit Zeigern ziemlich lax gehandhabt.</p>
<p>Was const_cast angeht, man braucht es in C++ wirklich sehr selten (bzw. wenn man es häufig braucht, macht man etwas gründlich falsch). Scott Meyers schlägt zur Vermeidung doppelter Codehaltung vor, const_cast für überladene Methoden zu benutzen, die sich nur durch den const-Qualifier auf *this unterscheiden. Code entnommen aus Effective C++, Item 3:</p>
<pre><code class="language-cpp">class TextBlock {
public:
  const char &amp;operator[](std::size_t position) const {
    ...
    ...
    ...
    return text[position];
  }

  char &amp;operator[](std::size_t position)  {
    return const_cast&lt;char&amp;&gt;(static_cast&lt;TextBlock const &amp;&gt;(*this)[position]);
  }

  ...
};
</code></pre>
<p>...und dann gibt es da noch den Umgang mit alten C-Bibliotheken, denen const-Qualifier fehlen, aber damit hat es sich eigentlich auch schon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2042925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2042925</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 31 Mar 2011 18:34:29 GMT</pubDate></item></channel></rss>