<?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[Factory Pattern - Linker Error]]></title><description><![CDATA[<p>Hi</p>
<p>Ich hab mal nen neuen Thread aufgemacht, weil ich Probleme hab, ne Factory Methode in C++ zu implementieren. Ist sicher nur ein blöder Fehler, aber ich finde ihn nicht. Wäre daher froh über jede Hilfe.</p>
<p>Also hier mein Code:<br />
Product.h</p>
<pre><code class="language-cpp">#pragma once

class Product
{
public:
	Product(void){}
	virtual ~Product(void) = 0;
	virtual void say_hello() = 0;
};
</code></pre>
<p>Creator.h</p>
<pre><code class="language-cpp">#pragma once

class Product;

class Creator
{
public:
	Creator(void) {}
	virtual ~Creator(void) = 0;
	virtual Product* create() = 0;
};
</code></pre>
<p>Concrete_Product.h und .cpp</p>
<pre><code class="language-cpp">#pragma once

#include &quot;Product.h&quot;

class Concrete_Product :
	public Product
{
public:
	Concrete_Product(void);
	~Concrete_Product(void);
	virtual void say_hello();
};
//.cpp
#include &quot;Concrete_Product.h&quot;
#include &lt;iostream&gt;

Concrete_Product::Concrete_Product(void)
{
}

Concrete_Product::~Concrete_Product(void)
{
}

void Concrete_Product::say_hello()
{
	std::cout &lt;&lt; &quot;Hello from Concrete Product&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Concrete_Creator.h und .cpp</p>
<pre><code class="language-cpp">#pragma once

#include &quot;Creator.h&quot;

class Product;

class Concrete_Creator :
	public Creator
{
public:
	Concrete_Creator(void);
	~Concrete_Creator(void);
	virtual Product* create();

};
//.cpp
#include &quot;Concrete_Creator.h&quot;
#include &quot;Product.h&quot;
#include &quot;Concrete_Product.h&quot;

Concrete_Creator::Concrete_Creator(void)
{
}

Concrete_Creator::~Concrete_Creator(void)
{
}

Product* Concrete_Creator::create() 
{
	return new Concrete_Product();
}
</code></pre>
<p>Main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Creator.h&quot;
#include &quot;Product.h&quot;
#include &quot;Concrete_Creator.h&quot;
#include &quot;Concrete_Product.h&quot;

using namespace std;

int main()
{
	Creator* creatorA;
	creatorA = new Concrete_Creator;
	Product* productA;
	productA = creatorA-&gt;create();
	productA-&gt;say_hello();
	return 0;
}
</code></pre>
<p>Fehlermeldung:</p>
<pre><code class="language-cpp">Concrete_Creator.obj : error LNK2019: 
unresolved external symbol &quot;public: virtual __thiscall Creator::~Creator(void)&quot; (??1Creator@@UAE@XZ) 
referenced in function &quot;public: virtual __thiscall Concrete_Creator::~Concrete_Creator(void)&quot; (??1Concrete_Creator@@UAE@XZ)
Concrete_Product.obj : error LNK2019: 
unresolved external symbol &quot;public: virtual __thiscall Product::~Product(void)&quot; (??1Product@@UAE@XZ) 
referenced in function &quot;public: virtual __thiscall Concrete_Product::~Concrete_Product(void)&quot; (??1Concrete_Product@@UAE@XZ)
</code></pre>
<p>Any ideas?</p>
<p>Danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153908/factory-pattern-linker-error</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 21:32:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153908.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Jul 2006 17:24:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Factory Pattern - Linker Error on Fri, 21 Jul 2006 17:24:18 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich hab mal nen neuen Thread aufgemacht, weil ich Probleme hab, ne Factory Methode in C++ zu implementieren. Ist sicher nur ein blöder Fehler, aber ich finde ihn nicht. Wäre daher froh über jede Hilfe.</p>
<p>Also hier mein Code:<br />
Product.h</p>
<pre><code class="language-cpp">#pragma once

class Product
{
public:
	Product(void){}
	virtual ~Product(void) = 0;
	virtual void say_hello() = 0;
};
</code></pre>
<p>Creator.h</p>
<pre><code class="language-cpp">#pragma once

class Product;

class Creator
{
public:
	Creator(void) {}
	virtual ~Creator(void) = 0;
	virtual Product* create() = 0;
};
</code></pre>
<p>Concrete_Product.h und .cpp</p>
<pre><code class="language-cpp">#pragma once

#include &quot;Product.h&quot;

class Concrete_Product :
	public Product
{
public:
	Concrete_Product(void);
	~Concrete_Product(void);
	virtual void say_hello();
};
//.cpp
#include &quot;Concrete_Product.h&quot;
#include &lt;iostream&gt;

Concrete_Product::Concrete_Product(void)
{
}

Concrete_Product::~Concrete_Product(void)
{
}

void Concrete_Product::say_hello()
{
	std::cout &lt;&lt; &quot;Hello from Concrete Product&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Concrete_Creator.h und .cpp</p>
<pre><code class="language-cpp">#pragma once

#include &quot;Creator.h&quot;

class Product;

class Concrete_Creator :
	public Creator
{
public:
	Concrete_Creator(void);
	~Concrete_Creator(void);
	virtual Product* create();

};
//.cpp
#include &quot;Concrete_Creator.h&quot;
#include &quot;Product.h&quot;
#include &quot;Concrete_Product.h&quot;

Concrete_Creator::Concrete_Creator(void)
{
}

Concrete_Creator::~Concrete_Creator(void)
{
}

Product* Concrete_Creator::create() 
{
	return new Concrete_Product();
}
</code></pre>
<p>Main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Creator.h&quot;
#include &quot;Product.h&quot;
#include &quot;Concrete_Creator.h&quot;
#include &quot;Concrete_Product.h&quot;

using namespace std;

int main()
{
	Creator* creatorA;
	creatorA = new Concrete_Creator;
	Product* productA;
	productA = creatorA-&gt;create();
	productA-&gt;say_hello();
	return 0;
}
</code></pre>
<p>Fehlermeldung:</p>
<pre><code class="language-cpp">Concrete_Creator.obj : error LNK2019: 
unresolved external symbol &quot;public: virtual __thiscall Creator::~Creator(void)&quot; (??1Creator@@UAE@XZ) 
referenced in function &quot;public: virtual __thiscall Concrete_Creator::~Concrete_Creator(void)&quot; (??1Concrete_Creator@@UAE@XZ)
Concrete_Product.obj : error LNK2019: 
unresolved external symbol &quot;public: virtual __thiscall Product::~Product(void)&quot; (??1Product@@UAE@XZ) 
referenced in function &quot;public: virtual __thiscall Concrete_Product::~Concrete_Product(void)&quot; (??1Concrete_Product@@UAE@XZ)
</code></pre>
<p>Any ideas?</p>
<p>Danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101964</guid><dc:creator><![CDATA[OOptimist]]></dc:creator><pubDate>Fri, 21 Jul 2006 17:24:18 GMT</pubDate></item><item><title><![CDATA[Reply to Factory Pattern - Linker Error on Fri, 21 Jul 2006 17:28:07 GMT]]></title><description><![CDATA[<p>ps: bin von dem Beispiel von der Seite unten ausgegangen.<br />
Obwohl das C# ist, aber ich glaube ich habs richtig umgesetzt..<br />
<a href="http://www.dofactory.com/Patterns/PatternFactory.aspx#_self2" rel="nofollow">http://www.dofactory.com/Patterns/PatternFactory.aspx#_self2</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101965</guid><dc:creator><![CDATA[OOPtimist]]></dc:creator><pubDate>Fri, 21 Jul 2006 17:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to Factory Pattern - Linker Error on Fri, 21 Jul 2006 17:30:04 GMT]]></title><description><![CDATA[<p>Dir fehlen die Implementierungen der Destruktoren von Product und Creator.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101966</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Fri, 21 Jul 2006 17:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to Factory Pattern - Linker Error on Fri, 21 Jul 2006 17:38:52 GMT]]></title><description><![CDATA[<p>*doh*</p>
<p>Danke, das wars <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="👍"
    /><br />
Ein {} am Ende der Zeile hats gebraucht.<br />
Ich hab überall anders gesucht, aber nicht da. Würd ich mal unter meine blödsten Pannen beim Programmieren einordnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101974</guid><dc:creator><![CDATA[OOPtimist]]></dc:creator><pubDate>Fri, 21 Jul 2006 17:38:52 GMT</pubDate></item><item><title><![CDATA[Reply to Factory Pattern - Linker Error on Fri, 21 Jul 2006 18:06:20 GMT]]></title><description><![CDATA[<p>Hmm..</p>
<pre><code class="language-cpp">Product* Concrete_Creator::create() 
{
    return new Concrete_Product();
}
</code></pre>
<p>Kann man in C++ das eigentlich nicht anders lösen, als dass man in der create() Methode der Creaters einen Zeiger auf ein Produkt zurückgibt?<br />
Ich glaube, dass das ärger geben könnte beim aufräumen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101987</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Fri, 21 Jul 2006 18:06:20 GMT</pubDate></item><item><title><![CDATA[Reply to Factory Pattern - Linker Error on Fri, 21 Jul 2006 18:23:36 GMT]]></title><description><![CDATA[<p>Nö, ein polymorphes Objekt &quot;weiss&quot; auch von einem Basisklassenzeiger, welcher Destruktor der konkreteste ist und arbeitet diesen zuerst ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101990</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 21 Jul 2006 18:23:36 GMT</pubDate></item><item><title><![CDATA[Reply to Factory Pattern - Linker Error on Sun, 23 Jul 2006 16:31:27 GMT]]></title><description><![CDATA[<p>Hmm<br />
das meint ich nicht. Probleme könnten auftreten, weil die Funktion ein Objekt erstellt, dass man dann ausserhalb löschen muss:</p>
<pre><code class="language-cpp">Creator* creatorA = new Concrete_Creator();
    Product* productA;
    product = creatorA-&gt;create(); // Gibt pointer auf Product zurück
    product-&gt;say_hello();
    delete productA;  // Darf ich dann nicht vergessen
    delete creatorA;
</code></pre>
<p>Wäre da eventuell ein auto_ptr nützlich?</p>
<p>Danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102663</guid><dc:creator><![CDATA[Ooptimist]]></dc:creator><pubDate>Sun, 23 Jul 2006 16:31:27 GMT</pubDate></item><item><title><![CDATA[Reply to Factory Pattern - Linker Error on Sun, 23 Jul 2006 16:39:01 GMT]]></title><description><![CDATA[<p>boost::shared_ptr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102668</guid><dc:creator><![CDATA[.a]]></dc:creator><pubDate>Sun, 23 Jul 2006 16:39:01 GMT</pubDate></item><item><title><![CDATA[Reply to Factory Pattern - Linker Error on Sun, 23 Jul 2006 18:14:48 GMT]]></title><description><![CDATA[<p>.a schrieb:</p>
<blockquote>
<p>boost::shared_ptr</p>
</blockquote>
<p>Für den oben genannten Zweck wäre ein std::auto_ptr&lt;&gt; die bessere Wahl, weil für den Zweck ein boost::shared_ptr&lt;&gt; zuviel overhead hätte.</p>
<p>BR<br />
Vinzenz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102725</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Sun, 23 Jul 2006 18:14:48 GMT</pubDate></item></channel></rss>