<?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[Programm lässt sich nicht kompilieren]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche gerade mit Pattern zu arbeiten leider lässt sich mein Programmcode nicht komplieren, diesen Fehler bekomme ich</p>
<pre><code>[code]
error C2512: 'Manager' : no appropriate default constructor available
error C1903: unable to recover from previous error(s); stopping compilation
</code></pre>
<p>Der ganze Quelltext steht in einer Datei (ich weiß nicht gerade die feine Art)</p>
<p>main.cpp</p>
<pre><code class="language-cpp">class Employee;
class Manager;
class Engineer;

class EmployeeType
{
public:
	virtual int payAmount(Employee e)=0;
};
class Employee
{
public:
	Employee():_type(new Manager()){};
	int getGehalt(){ return gehalt; };
	int getBonus(){ return bonus; };
	int payAmount(){ return _type-&gt;payAmount(*this); };
private:
	int gehalt;
	int bonus;
	EmployeeType *_type;
};

class Manager : public EmployeeType
{
public:

	virtual int payAmount(Employee e)
	{
		return e.getGehalt()+e.getBonus();
	};
};

class Engineer : public EmployeeType
{
	virtual int payAmount(Employee e)
	{
		return e.getGehalt();
	};

};

int main()
{

	return 0;
}
</code></pre>
<p>Kennt jemand die Lösung??<br />
Bin am verzweifeln.:(</p>
<p>mfg:)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218348/programm-lässt-sich-nicht-kompilieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 04:35:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218348.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 19 Jul 2008 19:07:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programm lässt sich nicht kompilieren on Sat, 19 Jul 2008 19:07:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche gerade mit Pattern zu arbeiten leider lässt sich mein Programmcode nicht komplieren, diesen Fehler bekomme ich</p>
<pre><code>[code]
error C2512: 'Manager' : no appropriate default constructor available
error C1903: unable to recover from previous error(s); stopping compilation
</code></pre>
<p>Der ganze Quelltext steht in einer Datei (ich weiß nicht gerade die feine Art)</p>
<p>main.cpp</p>
<pre><code class="language-cpp">class Employee;
class Manager;
class Engineer;

class EmployeeType
{
public:
	virtual int payAmount(Employee e)=0;
};
class Employee
{
public:
	Employee():_type(new Manager()){};
	int getGehalt(){ return gehalt; };
	int getBonus(){ return bonus; };
	int payAmount(){ return _type-&gt;payAmount(*this); };
private:
	int gehalt;
	int bonus;
	EmployeeType *_type;
};

class Manager : public EmployeeType
{
public:

	virtual int payAmount(Employee e)
	{
		return e.getGehalt()+e.getBonus();
	};
};

class Engineer : public EmployeeType
{
	virtual int payAmount(Employee e)
	{
		return e.getGehalt();
	};

};

int main()
{

	return 0;
}
</code></pre>
<p>Kennt jemand die Lösung??<br />
Bin am verzweifeln.:(</p>
<p>mfg:)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549912</guid><dc:creator><![CDATA[__FILE__]]></dc:creator><pubDate>Sat, 19 Jul 2008 19:07:51 GMT</pubDate></item><item><title><![CDATA[Reply to Programm lässt sich nicht kompilieren on Sat, 19 Jul 2008 19:45:10 GMT]]></title><description><![CDATA[<p>Also das liegt am Konstructor von Employee. Er brauch für new Manager die ganze Definition von class Manager. Lösung: Schön machen und die Definitionen in den Header oder Employee-Konstructor unter Manager Deklarieren:</p>
<pre><code class="language-cpp">class Employee;
class Manager;
class Engineer;

class EmployeeType
{
public:
    virtual int payAmount(Employee e)=0;
};
class Employee
{
public:
    Employee();
    int getGehalt(){ return gehalt; };
    int getBonus(){ return bonus; };
    int payAmount(){ return _type-&gt;payAmount(*this); };
private:
    int gehalt;
    int bonus;
    EmployeeType *_type;
};

class Manager : public EmployeeType
{
public:

    virtual int payAmount(Employee e)
    {
        return e.getGehalt()+e.getBonus();
    };
};

class Engineer : public EmployeeType
{
    virtual int payAmount(Employee e)
    {
        return e.getGehalt();
    };

};

Employee::Employee() : _type( new Manager() ) {}

int main()
{

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1549927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549927</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sat, 19 Jul 2008 19:45:10 GMT</pubDate></item><item><title><![CDATA[Reply to Programm lässt sich nicht kompilieren on Sat, 19 Jul 2008 19:51:42 GMT]]></title><description><![CDATA[<p>Du hast einen Zirkelschluß in deinem Code.</p>
<p>Du greifst bei 'Employee():_type(new Manager()){};' schon auf die noch nicht vollständig definierte Klasse 'Manager' zu.</p>
<p>Du mußt entweder die Manager-Klasse vor die Employee-Klasse schreiben oder alternativ die Definition des Employee-Konstruktors nach der Manager-Klasse (die Deklaration bleibt natürlich in der Klasse).</p>
<p>Und wie du schon erkannt hast, solltest du die Trennung von Source- und Headerdateien durchführen (dann treten zwar solche Fehler häufiger auf, aber mit der Zeit kriegst du dann raus, wie man es richtig macht - du hast zwar schon die Vorwärtsreferenzen (Forward references) verwendet, aber hier bringen die nichts, nur wenn man Deklarationen der Form T* oder T&amp; verwendet).</p>
<p>P.S. Die Deklaration 'payAmount(Employee e)=0;' solltest du zu</p>
<pre><code class="language-cpp">virtual int payAmount(const Employee &amp;e) = 0;
</code></pre>
<p>ändern (da bei dir sonst bei der Übergabe immer erst eine Kopie erstellt wird (by value)).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549931</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sat, 19 Jul 2008 19:51:42 GMT</pubDate></item><item><title><![CDATA[Reply to Programm lässt sich nicht kompilieren on Sat, 19 Jul 2008 20:03:10 GMT]]></title><description><![CDATA[<p>Ja jetzt klappt es.</p>
<p>Vielen Dank:)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549935</guid><dc:creator><![CDATA[__FILE__]]></dc:creator><pubDate>Sat, 19 Jul 2008 20:03:10 GMT</pubDate></item><item><title><![CDATA[Reply to Programm lässt sich nicht kompilieren on Sat, 19 Jul 2008 20:04:10 GMT]]></title><description><![CDATA[<p>Welcher Compiler gibt denn so eine miserable Meldung aus??! <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/1549937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549937</guid><dc:creator><![CDATA[GCC]]></dc:creator><pubDate>Sat, 19 Jul 2008 20:04:10 GMT</pubDate></item></channel></rss>