<?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[Variable undeclared, obwohl sie im header steht]]></title><description><![CDATA[<p>Hi, ich bin mitlerweile echt Ratlos.<br />
Versuche seit gestern Mittag mein Programm neu strukturiert echt OOP zu machen und komme da mit C++ (header files) einfach nicht klar. (in java mit oop kein problem...)</p>
<p>Ich versuche quasi das Interface (Schnittstellt der Klasse) als header Datei auszulagern und in der .cxx dann nur die implementation der Methoden/ctor/dtor etc zu haben. Ist die Idee überhaupt umsetzbar? Oder sollte ich diese<br />
void foo(); Deklarationen lieber in die Klassen-Datei schreiben?<br />
Von mir aus kanns auch alles in der .cxx stehen und ich komme ohne header aus. Hauptsache es läuft endlich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f636.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_without_mouth"
      title=":-X"
      alt="😶"
    /><br />
Auch sichtbarkeiten innerhalb meines Programms sind mir egal. Darf auch alles public sein wenns hilft..</p>
<p>Ich habe nun ein minimal-Beispiel konstruiert, wo mein Problem auftritt:</p>
<pre><code class="language-cpp">/* Konto.hxx */
class Konto
{
    public:
        // Konstruktor(en) &amp; Destruktor(en)
        Konto(int);
        ~Konto(void);

        // Funktion(en)
        int gibKontostand(void);

    private:
        int _stand;
};
</code></pre>
<pre><code class="language-cpp">/* Konto.cxx */
#include &lt;iostream&gt;
#include &quot;Konto.hxx&quot;

// Konstruktor
Konto::Konto(int geld)
: _stand(geld)
{
    std::cout &lt;&lt; &quot;Konto erstellt mit &quot; &lt;&lt; _stand &lt;&lt; &quot; Geld drauf\n&quot;;
}

// Desktruktor
Konto::~Konto(void)
{
    _stand = 0;
}

// Funktion(en)
int gibKontostand(void)
{
    return _stand;
}
</code></pre>
<pre><code class="language-cpp">/* Bank.cxx */

#include &lt;iostream&gt;
#include &quot;Konto.hxx&quot;

int main()
{
    Konto kto1(3);
    Konto kto2(55);

    std::cout &lt;&lt; &quot;Kto1 hat &quot; &lt;&lt; kto1.gibKontostand() &lt;&lt; &quot; Geld drauf\n&quot;;
    std::cout &lt;&lt; &quot;Kto2 hat &quot; &lt;&lt; kto2.gibKontostand() &lt;&lt; &quot; Geld drauf\n&quot;;
}
</code></pre>
<p>Die Fehlermeldung sieht dann so aus:</p>
<blockquote>
<p>In function <code>int gibKontostand()':</code>_stand undeclared (first use of this function)<br />
(Each undeclared identifier is reported only once for each function it appears in.)</p>
</blockquote>
<p>Ich benutze das bekannte aktuell/neuste Bloodshed Dev-C++ 4.9.9.2 mit dem dazugehörigen GCC 3.4.2 unter WinXP 32bit</p>
<p>Pls help me <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Ich scheine da grundsätzlich nicht verstanden zu haben, wie das mit diesem prä-definieren in header files funktioniert.<br />
Aber wie gesagt. Ich habe auch schon versucht auf die .hxx zu verzichten und alles in der .cxx zu behalten.<br />
Das beste was ich mal erreicht habe, war ein lauffähiges Programm, was statt den Kontoständen dann die Speicher-Adressen der Kontostände ausgegeben hat.<br />
Habe mir bereits einige Tutorials zu header files / Konstruktoren etc angeschaut aber konnte nieie erkennen, was bei mir denn nun falsch läuft <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/211838/variable-undeclared-obwohl-sie-im-header-steht</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 11:24:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/211838.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 28 Apr 2008 11:31:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variable undeclared, obwohl sie im header steht on Mon, 28 Apr 2008 11:31:00 GMT]]></title><description><![CDATA[<p>Hi, ich bin mitlerweile echt Ratlos.<br />
Versuche seit gestern Mittag mein Programm neu strukturiert echt OOP zu machen und komme da mit C++ (header files) einfach nicht klar. (in java mit oop kein problem...)</p>
<p>Ich versuche quasi das Interface (Schnittstellt der Klasse) als header Datei auszulagern und in der .cxx dann nur die implementation der Methoden/ctor/dtor etc zu haben. Ist die Idee überhaupt umsetzbar? Oder sollte ich diese<br />
void foo(); Deklarationen lieber in die Klassen-Datei schreiben?<br />
Von mir aus kanns auch alles in der .cxx stehen und ich komme ohne header aus. Hauptsache es läuft endlich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f636.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_without_mouth"
      title=":-X"
      alt="😶"
    /><br />
Auch sichtbarkeiten innerhalb meines Programms sind mir egal. Darf auch alles public sein wenns hilft..</p>
<p>Ich habe nun ein minimal-Beispiel konstruiert, wo mein Problem auftritt:</p>
<pre><code class="language-cpp">/* Konto.hxx */
class Konto
{
    public:
        // Konstruktor(en) &amp; Destruktor(en)
        Konto(int);
        ~Konto(void);

        // Funktion(en)
        int gibKontostand(void);

    private:
        int _stand;
};
</code></pre>
<pre><code class="language-cpp">/* Konto.cxx */
#include &lt;iostream&gt;
#include &quot;Konto.hxx&quot;

// Konstruktor
Konto::Konto(int geld)
: _stand(geld)
{
    std::cout &lt;&lt; &quot;Konto erstellt mit &quot; &lt;&lt; _stand &lt;&lt; &quot; Geld drauf\n&quot;;
}

// Desktruktor
Konto::~Konto(void)
{
    _stand = 0;
}

// Funktion(en)
int gibKontostand(void)
{
    return _stand;
}
</code></pre>
<pre><code class="language-cpp">/* Bank.cxx */

#include &lt;iostream&gt;
#include &quot;Konto.hxx&quot;

int main()
{
    Konto kto1(3);
    Konto kto2(55);

    std::cout &lt;&lt; &quot;Kto1 hat &quot; &lt;&lt; kto1.gibKontostand() &lt;&lt; &quot; Geld drauf\n&quot;;
    std::cout &lt;&lt; &quot;Kto2 hat &quot; &lt;&lt; kto2.gibKontostand() &lt;&lt; &quot; Geld drauf\n&quot;;
}
</code></pre>
<p>Die Fehlermeldung sieht dann so aus:</p>
<blockquote>
<p>In function <code>int gibKontostand()':</code>_stand undeclared (first use of this function)<br />
(Each undeclared identifier is reported only once for each function it appears in.)</p>
</blockquote>
<p>Ich benutze das bekannte aktuell/neuste Bloodshed Dev-C++ 4.9.9.2 mit dem dazugehörigen GCC 3.4.2 unter WinXP 32bit</p>
<p>Pls help me <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Ich scheine da grundsätzlich nicht verstanden zu haben, wie das mit diesem prä-definieren in header files funktioniert.<br />
Aber wie gesagt. Ich habe auch schon versucht auf die .hxx zu verzichten und alles in der .cxx zu behalten.<br />
Das beste was ich mal erreicht habe, war ein lauffähiges Programm, was statt den Kontoständen dann die Speicher-Adressen der Kontostände ausgegeben hat.<br />
Habe mir bereits einige Tutorials zu header files / Konstruktoren etc angeschaut aber konnte nieie erkennen, was bei mir denn nun falsch läuft <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1499560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1499560</guid><dc:creator><![CDATA[D0n]]></dc:creator><pubDate>Mon, 28 Apr 2008 11:31:00 GMT</pubDate></item><item><title><![CDATA[Reply to Variable undeclared, obwohl sie im header steht on Mon, 28 Apr 2008 11:37:42 GMT]]></title><description><![CDATA[<p>du hast &quot;gibKontostand&quot; nicht richtig definiert<br />
du hast den klassennamen vergessen</p>
<pre><code class="language-cpp">int Konto::gibKontostand(void) // &lt;-- da
{
    return _stand;
}
</code></pre>
<p>das bedeutet das die klasse &quot;Konto&quot; das gibKontostand nicht definiert hat,<br />
und es eine funktion gbKontostand gibt, welche in der gegend rumfliegt und eine unbekannte variable abfragt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1499569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1499569</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Mon, 28 Apr 2008 11:37:42 GMT</pubDate></item><item><title><![CDATA[Reply to Variable undeclared, obwohl sie im header steht on Mon, 28 Apr 2008 11:40:09 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">/* Konto.hxx */
#if !defined(KONTO_HEADER)
#define KONTO_HEADER;

class Konto
{
    public:
        // Konstruktor(en) &amp; Destruktor(en)
        Konto(int geld); // &lt;-- Unsitte im Header den Bezeichner dies wegzulassen, der
        // Header wird gelesen! Davon abgesehen was soll das sein, Euro/Mark...?
        ~Konto(); // &lt;-- (void) ist unnötig ()

        // Funktion(en)
        int gibKontostand();

    private:
        int _stand;
};

#endif
</code></pre>
<pre><code class="language-cpp">/* Konto.cxx */
#include &lt;iostream&gt;
#include &quot;Konto.hxx&quot;

// Konstruktor
Konto::Konto(int geld)
: _stand(geld)
{
    std::cout &lt;&lt; &quot;Konto erstellt mit &quot; &lt;&lt; _stand &lt;&lt; &quot; Geld drauf\n&quot;;
}

// Desktruktor
Konto::~Konto(void)
{
    // _stand = 0; &lt;-- Unnötig, da eh destruiert
}

// Funktion(en)
int Konto::gibKontostand() // Hier Fehlte &quot;Konto::&quot;
{
    return _stand;
}
</code></pre>
<pre><code class="language-cpp">/* Bank.cxx */
#include &lt;iostream&gt;
#include &quot;Konto.hxx&quot;

int main()
{
    Konto kto1(3);
    Konto kto2(55);

    std::cout &lt;&lt; &quot;Kto1 hat &quot; &lt;&lt; kto1.gibKontostand() &lt;&lt; &quot; Geld drauf\n&quot;;
    std::cout &lt;&lt; &quot;Kto2 hat &quot; &lt;&lt; kto2.gibKontostand() &lt;&lt; &quot; Geld drauf\n&quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1499571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1499571</guid><dc:creator><![CDATA[Korrektur]]></dc:creator><pubDate>Mon, 28 Apr 2008 11:40:09 GMT</pubDate></item><item><title><![CDATA[Reply to Variable undeclared, obwohl sie im header steht on Mon, 28 Apr 2008 11:41:49 GMT]]></title><description><![CDATA[<p>Ja, du hast natürlich recht.<br />
Blöderweise behebt das sogar den Fehler..<br />
Aber in meinem echten Programm habe ich (gerad nochmal geprüft) tatsächlich vor jeder Funktions-Implementation brav den Klassen-Namen geschrieben und habe trotzdem genau das gleiche Problem.<br />
Der code ist nur so ewig lang.. will euch das nich zumuten <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="😉"
    /><br />
Ich werd mal versuchen alles überflüssige wegzulassen und dann den code zu posten, der diesen Fehler produziert</p>
<p>danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1499573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1499573</guid><dc:creator><![CDATA[D0n]]></dc:creator><pubDate>Mon, 28 Apr 2008 11:41:49 GMT</pubDate></item><item><title><![CDATA[Reply to Variable undeclared, obwohl sie im header steht on Mon, 28 Apr 2008 11:46:32 GMT]]></title><description><![CDATA[<p>D0n schrieb:</p>
<blockquote>
<p>Aber in meinem echten Programm habe ich (gerad nochmal geprüft) tatsächlich vor jeder Funktions-Implementation brav den Klassen-Namen geschrieben und habe trotzdem genau das gleiche Problem.</p>
</blockquote>
<p>Dann achte mal darauf ob der Name wirklich identisch geschrieben ist etc.<br />
Der Fehler wird dann ausgegeben, wenn keine Variable diesen Namens existiert (Bei einer Methode wird der Name wie folgt gesucht: a) lokale Bezeichner b) Bezeicher der Klasse c) globale Bezeicher).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1499580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1499580</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 28 Apr 2008 11:46:32 GMT</pubDate></item><item><title><![CDATA[Reply to Variable undeclared, obwohl sie im header steht on Mon, 28 Apr 2008 12:02:39 GMT]]></title><description><![CDATA[<p>wie sieht den die genaue fehlermeldung aus ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1499599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1499599</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Mon, 28 Apr 2008 12:02:39 GMT</pubDate></item><item><title><![CDATA[Reply to Variable undeclared, obwohl sie im header steht on Mon, 28 Apr 2008 12:06:16 GMT]]></title><description><![CDATA[<p>Hier mal nur der Teil mit den Konstruktoren der das Problem verursacht</p>
<p>Ein Teil der Kanjiteil.hxx:</p>
<pre><code class="language-cpp">/* Kanjiteil.hxx */
class Kanjiteil
{
    public:
        // Konstruktor(en) und Desktruktor(en)
        Kanjiteil(BImage&amp;, int, int);
</code></pre>
<p>Ein Teil aus der Kanjiteil.cxx:</p>
<pre><code class="language-cpp">/* Kanjiteil.cxx */

// Variablen
int _breite, _hoehe; // Breite und Hoehe des Teilbildes
// [...] hier werden noch mehr Variablen deklariert
BImage _bild; // Das Bild des Teilkanjis

// Konstruktor(en)
Kanjiteil::Kanjiteil(BImage&amp; b, int bre, int hoe)
: _breite(bre), _hoehe(hoe)
{
      cout &lt;&lt; &quot;Konstruktor gestartet\n&quot;;
      _bild = b;
      init();
}
</code></pre>
<p>Fehlermeldung:</p>
<blockquote>
<p>In construktor <code>Kanjiteil::Kanjiteil(vigra::BImage&amp;, int, int)': class \</code>Kanjiteil' does not have any field named `_breite'<br />
class `Kanjiteil' does not have any field named `_hoehe'<br />
[Build Error] [Kanjiteil.o] Error 1</p>
</blockquote>
<p>Und noch was:<br />
Wenn ich nun statt<br />
: _breite(bre), _hoehe(hoe)<br />
direkt im {} des Konstruktors schreibe<br />
_breite = bre;<br />
_hoehe = hoe;</p>
<p>Gibts keine Fehlermeldung!<br />
Auch das Programm läuft durch - aber es erzeugt keine Ausgaben, die ich zum Testen zwischendurch mit cout eingebaut habe. Sogar wenn ich dem Programm keine 2 Bilddateien als Argument mitgebe (was direkt am Anfang der main mit einem if(argc != 3) geprüft wird gibt es die dazugehörige Fehlermeldung nicht aus <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1499604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1499604</guid><dc:creator><![CDATA[D0n]]></dc:creator><pubDate>Mon, 28 Apr 2008 12:06:16 GMT</pubDate></item><item><title><![CDATA[Reply to Variable undeclared, obwohl sie im header steht on Mon, 28 Apr 2008 12:23:28 GMT]]></title><description><![CDATA[<p>sry mein fehler<br />
hatte vergessen in der kanji-datei die variablen deklaration wieder in den header zu schreiben. hatte sie noch /und nur/ in der .cxx<br />
seit sie jetz im header is machts keine fehlermeldung.. aber erzeugt halt auch keine ausgaben. aber das kann ja noch an anderen dingen liegen.<br />
werde jetzt mal weiter suchen</p>
<p>vielen dank an alle, die bis hierhin schonmal geholfen haben!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1499616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1499616</guid><dc:creator><![CDATA[D0n]]></dc:creator><pubDate>Mon, 28 Apr 2008 12:23:28 GMT</pubDate></item></channel></rss>