<?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[Vordefinierter Konstruktorparameter erzeugt Fehler]]></title><description><![CDATA[<p>Hallo cpp-Community,</p>
<p>bin gerade fleißig am C++ lernen. Da bin ich auf ein kleines Problm gestoßen: Ich habe im Moment eine Klasse, derren Konstruktor sich wie folgt deklariert:</p>
<pre><code class="language-cpp">ort(int neuX = 0, int neuY = 0) : X(neuX), Y(neuY) {
                }
</code></pre>
<p>Wenn ich nun ein Objekt wie folgt erzeuge:</p>
<pre><code class="language-cpp">ort nOertchen(23);
</code></pre>
<p>, funktioniert alles wunderbar. Aber, bei solch einem Objekt</p>
<pre><code class="language-cpp">ort nOertchen();
</code></pre>
<p>zeigt der Compiler bei Benutzung eine Fehlermeldung an.</p>
<pre><code class="language-cpp">anzeigen(nOertchen);
</code></pre>
<p>Fehlermeldung:<br />
main.cpp:11: error: invalid conversion from `ort (*)()' to `int'<br />
main.cpp:11: error: initializing argument 1 of `ort::ort(int, int)'</p>
<p>Gibt es eine Erklärung? Kompletter Code im Anhang.</p>
<p>Mfg<br />
rollinkarl</p>
<p>main.cpp:</p>
<pre><code class="language-cpp">#include&quot;ort.h&quot;
#include&lt;iostream&gt;
#include&lt;cstdlib&gt;

using namespace std;

int main() {
    ort nOertchen(23);
    ort nochNOertchen(0);
    anzeigen(nOertchen);
    anzeigen(nochNOertchen);
    cout &lt;&lt; entfernung(nOertchen, nochNOertchen) &lt;&lt; endl;
    nOertchen.aendern(2, 3);
    nochNOertchen.aendern(3,23);
    anzeigen(nOertchen);
    anzeigen(nochNOertchen);
    cout &lt;&lt; entfernung(nOertchen, nochNOertchen) &lt;&lt; endl;
    nOertchen.aendern(34,57);
    anzeigen(nOertchen);
    anzeigen(nochNOertchen);
    cout &lt;&lt; entfernung(nOertchen, nochNOertchen) &lt;&lt; endl;

    system(&quot;pause&quot;);
}
</code></pre>
<p>ort.h:</p>
<pre><code class="language-cpp">#ifndef ORT_H
#define ORT_H ORT_H
#include&lt;iostream&gt;
#include&lt;cmath&gt;

class ort {
    public:
        int ausgabeX() const;
        int ausgabeY() const;
        void aendern(int neuX, int neuY);
        ort(int neuX = 0, int neuY = 0) : X(neuX), Y(neuY) {
                }
    private:
        int X, Y;
};

inline int ort::ausgabeX() const {
    return X;
}

inline int ort::ausgabeY() const {
    return Y;
}

inline void ort::aendern(int neuX, int neuY) {
    X = neuX;
    Y = neuY; 
}
inline double entfernung (const ort&amp; ort1, const ort&amp; ort2) {
       double ex = static_cast&lt;double&gt; (ort1.ausgabeX() - ort2.ausgabeX());
       double ey = static_cast&lt;double&gt; (ort1.ausgabeY() - ort2.ausgabeY());
       return std::sqrt(ex*ex + ey*ey);
       }

inline void anzeigen (const ort&amp; o) {
       std::cout &lt;&lt; &quot;(&quot; &lt;&lt; o.ausgabeX() &lt;&lt; &quot;|&quot; &lt;&lt; o.ausgabeY() &lt;&lt; &quot;)&quot; &lt;&lt; std::endl;
       }
#endif
</code></pre>
<p>ort.cpp leer</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/228490/vordefinierter-konstruktorparameter-erzeugt-fehler</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 14:17:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/228490.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Nov 2008 21:51:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vordefinierter Konstruktorparameter erzeugt Fehler on Fri, 28 Nov 2008 21:51:24 GMT]]></title><description><![CDATA[<p>Hallo cpp-Community,</p>
<p>bin gerade fleißig am C++ lernen. Da bin ich auf ein kleines Problm gestoßen: Ich habe im Moment eine Klasse, derren Konstruktor sich wie folgt deklariert:</p>
<pre><code class="language-cpp">ort(int neuX = 0, int neuY = 0) : X(neuX), Y(neuY) {
                }
</code></pre>
<p>Wenn ich nun ein Objekt wie folgt erzeuge:</p>
<pre><code class="language-cpp">ort nOertchen(23);
</code></pre>
<p>, funktioniert alles wunderbar. Aber, bei solch einem Objekt</p>
<pre><code class="language-cpp">ort nOertchen();
</code></pre>
<p>zeigt der Compiler bei Benutzung eine Fehlermeldung an.</p>
<pre><code class="language-cpp">anzeigen(nOertchen);
</code></pre>
<p>Fehlermeldung:<br />
main.cpp:11: error: invalid conversion from `ort (*)()' to `int'<br />
main.cpp:11: error: initializing argument 1 of `ort::ort(int, int)'</p>
<p>Gibt es eine Erklärung? Kompletter Code im Anhang.</p>
<p>Mfg<br />
rollinkarl</p>
<p>main.cpp:</p>
<pre><code class="language-cpp">#include&quot;ort.h&quot;
#include&lt;iostream&gt;
#include&lt;cstdlib&gt;

using namespace std;

int main() {
    ort nOertchen(23);
    ort nochNOertchen(0);
    anzeigen(nOertchen);
    anzeigen(nochNOertchen);
    cout &lt;&lt; entfernung(nOertchen, nochNOertchen) &lt;&lt; endl;
    nOertchen.aendern(2, 3);
    nochNOertchen.aendern(3,23);
    anzeigen(nOertchen);
    anzeigen(nochNOertchen);
    cout &lt;&lt; entfernung(nOertchen, nochNOertchen) &lt;&lt; endl;
    nOertchen.aendern(34,57);
    anzeigen(nOertchen);
    anzeigen(nochNOertchen);
    cout &lt;&lt; entfernung(nOertchen, nochNOertchen) &lt;&lt; endl;

    system(&quot;pause&quot;);
}
</code></pre>
<p>ort.h:</p>
<pre><code class="language-cpp">#ifndef ORT_H
#define ORT_H ORT_H
#include&lt;iostream&gt;
#include&lt;cmath&gt;

class ort {
    public:
        int ausgabeX() const;
        int ausgabeY() const;
        void aendern(int neuX, int neuY);
        ort(int neuX = 0, int neuY = 0) : X(neuX), Y(neuY) {
                }
    private:
        int X, Y;
};

inline int ort::ausgabeX() const {
    return X;
}

inline int ort::ausgabeY() const {
    return Y;
}

inline void ort::aendern(int neuX, int neuY) {
    X = neuX;
    Y = neuY; 
}
inline double entfernung (const ort&amp; ort1, const ort&amp; ort2) {
       double ex = static_cast&lt;double&gt; (ort1.ausgabeX() - ort2.ausgabeX());
       double ey = static_cast&lt;double&gt; (ort1.ausgabeY() - ort2.ausgabeY());
       return std::sqrt(ex*ex + ey*ey);
       }

inline void anzeigen (const ort&amp; o) {
       std::cout &lt;&lt; &quot;(&quot; &lt;&lt; o.ausgabeX() &lt;&lt; &quot;|&quot; &lt;&lt; o.ausgabeY() &lt;&lt; &quot;)&quot; &lt;&lt; std::endl;
       }
#endif
</code></pre>
<p>ort.cpp leer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622664</guid><dc:creator><![CDATA[rollinkarl]]></dc:creator><pubDate>Fri, 28 Nov 2008 21:51:24 GMT</pubDate></item><item><title><![CDATA[Reply to Vordefinierter Konstruktorparameter erzeugt Fehler on Fri, 28 Nov 2008 22:05:23 GMT]]></title><description><![CDATA[<p>rollinkarl schrieb:</p>
<blockquote>
<p>Fehlermeldung:<br />
main.cpp:11: error: invalid conversion from `ort (*)()' to `int'<br />
main.cpp:11: error: initializing argument 1 of `ort::ort(int, int)'</p>
<p>Gibt es eine Erklärung? Kompletter Code im Anhang.</p>
</blockquote>
<p>Ich habe mir den Code nicht im Detail angeschaut, nur mal bei mir durch den Compiler (Visual C++ 2008, SP1; Mit Warnstufe 4) gejagt: Kein Fehler gemeldet</p>
<p>Auf Anhieb sehe ich hier auch keinen Fehler.</p>
<p>Welchen Compiler verwendest du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622667</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 28 Nov 2008 22:05:23 GMT</pubDate></item><item><title><![CDATA[Reply to Vordefinierter Konstruktorparameter erzeugt Fehler on Fri, 28 Nov 2008 22:38:48 GMT]]></title><description><![CDATA[<p>rollinkarl schrieb:</p>
<blockquote>
<p>Wenn ich nun ein Objekt wie folgt erzeuge:</p>
<pre><code class="language-cpp">ort nOertchen(23);
</code></pre>
<p>, funktioniert alles wunderbar. Aber, bei solch einem Objekt</p>
<pre><code class="language-cpp">ort nOertchen();
</code></pre>
<p>zeigt der Compiler bei Benutzung eine Fehlermeldung an.</p>
<pre><code class="language-cpp">anzeigen(nOertchen);
</code></pre>
<p>Fehlermeldung:<br />
main.cpp:11: error: invalid conversion from `ort (*)()' to `int'<br />
main.cpp:11: error: initializing argument 1 of `ort::ort(int, int)'</p>
<p>Gibt es eine Erklärung?</p>
</blockquote>
<p>Für den Compiler sieht &quot; <code>ort nOertchen();</code> &quot; aus wie eine Funktionsdeklaration (mit Namen &quot;nOertchen&quot;, ohne Parameter und mit Rückgabewert vom Typ &quot;ort&quot;). Um den Konstruktor ohne Argumente aufzurufen, mußt du die Klammern weglassen, also:</p>
<pre><code class="language-cpp">ort nOertchen;
</code></pre>
<p>Und ja, das ist irgendwie komisch und verwirrend, läßt sich aber leider nichts dran ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622678</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Fri, 28 Nov 2008 22:38:48 GMT</pubDate></item><item><title><![CDATA[Reply to Vordefinierter Konstruktorparameter erzeugt Fehler on Fri, 28 Nov 2008 22:43:54 GMT]]></title><description><![CDATA[<p>Was sagt eigentlich der Standard dazu? Und wieso sucht der Compiler in einer Funktion nach Funktionsdeklarationen <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=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622679</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 28 Nov 2008 22:43:54 GMT</pubDate></item><item><title><![CDATA[Reply to Vordefinierter Konstruktorparameter erzeugt Fehler on Fri, 28 Nov 2008 23:02:34 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Was sagt eigentlich der Standard dazu? Und wieso sucht der Compiler in einer Funktion nach Funktionsdeklarationen <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=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Ich kann jetzt nicht die passende Stelle im Standard zitieren, wäre interessant, wenn jemand dazu noch genaueres weiß.<br />
Aber meines Wissens sind Deklarationen auch innerhalb von Funktionen erlaubt (und dann auch nur dort sichtbar). Folgendes z.B. funktioniert:</p>
<pre><code class="language-cpp">int main()
{
    void foo();
    foo();
}

void foo() { }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1622686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622686</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Fri, 28 Nov 2008 23:02:34 GMT</pubDate></item><item><title><![CDATA[Reply to Vordefinierter Konstruktorparameter erzeugt Fehler on Fri, 28 Nov 2008 23:24:00 GMT]]></title><description><![CDATA[<p>dooooomi schrieb:</p>
<blockquote>
<p>Aber meines Wissens sind Deklarationen auch innerhalb von Funktionen erlaubt</p>
</blockquote>
<p>Ok, danke, das würde das natürlich erklären <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/1622690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622690</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 28 Nov 2008 23:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vordefinierter Konstruktorparameter erzeugt Fehler on Fri, 28 Nov 2008 23:37:27 GMT]]></title><description><![CDATA[<p>über die eigenart, dass man bei lokalen (bei new Iregndwas() gehts) parameterlosen Objektinstanzierungen keine Klammern hinschreiben kann bin ich auch schon ein paar mal gestolpert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622696</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Fri, 28 Nov 2008 23:37:27 GMT</pubDate></item><item><title><![CDATA[Reply to Vordefinierter Konstruktorparameter erzeugt Fehler on Sat, 29 Nov 2008 14:42:57 GMT]]></title><description><![CDATA[<p>Ich bedanke mich für die schnelle Hilfe. Also ohne die Klammern funktioniert's jetzt. Wenn ich so drüber nachdenke ist es natürlich logisch, eine Funktionsdeklaration wäre davon wirklich nicht zu unterscheiden.</p>
<p>Es ist in meinem C++-Buch auch etwas schwammig formuliert: Dort steht nur für Standardkonstruktoren explizit, dass man die Klammer weglassen muss. Mit ein bisschen Gehirnschmalz hätte ich aber selber darauf kommen könne.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14941">@asc</a>: Mein Compiler ist übrigens MinGW/g++. Das es ohne Fehler durchläuft liegt daran, dass dem Konstruktoraufruf im angehangenen Source Code ein Parameter übergeben wird.</p>
<p>MfG rollinkarl</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1622920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1622920</guid><dc:creator><![CDATA[rollinkarl]]></dc:creator><pubDate>Sat, 29 Nov 2008 14:42:57 GMT</pubDate></item><item><title><![CDATA[Reply to Vordefinierter Konstruktorparameter erzeugt Fehler on Sat, 29 Nov 2008 19:21:16 GMT]]></title><description><![CDATA[<p>Der Standard sagt dazu, dass alles, was wie eine Deklaration aussieht auch eine Deklaration ist. Das ganze passiert, bevor bewertet wird ob die Deklaration an der Stelle erlaubt ist oder nicht.</p>
<p>Funktionsdeklarationen in Funktionen sind allerdings tatsächlich erlaubt.</p>
<p>Da gibt es auch noch viel gemeinere Konstellationen, bei denen es nicht so offensichtlich ist <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1623034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1623034</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sat, 29 Nov 2008 19:21:16 GMT</pubDate></item></channel></rss>