<?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[Template mit String-Array besetzen]]></title><description><![CDATA[<p>Ich habe Probleme bei folgender Klasse (gekürzt auf Problemfeld) und deren Benutzung:<br />
counterpart.h</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class Counterpart {
public:
	Counterpart(T *object, unsigned size_tmp);
private:
	T *object;
	const unsigned size;
	unsigned count;
};
</code></pre>
<p>counterpart.cpp</p>
<pre><code class="language-cpp">template&lt;class T&gt;
Counterpart&lt;T&gt;::Counterpart( T *object, unsigned size_tmp) : size(size_tmp) {
	this.object = object;
	count = 0;
}
</code></pre>
<p>Hier ist der Teil in der der Code zur Anwendung kommt:</p>
<p>irgendwas.cpp</p>
<pre><code class="language-cpp">Counterpart&lt;string *&gt; counterpart_az (
	new string[9] {
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;)
	}, 9
);
</code></pre>
<p>Wenn ich das jetzt compiliere, bekomme ich folgende Fehler-Meldung vom Compiler</p>
<pre><code>../scan_site.cpp:29:1: Fehler: keine passende Funktion für Aufruf von »Counterpart&lt;std::basic_string&lt;char&gt;*&gt;::Counterpart(std::string*, int)«
../scan_site.cpp:29:1: Anmerkung: Kandidaten sind:
../counterpart.h:14:2: Anmerkung: Counterpart&lt;T&gt;::Counterpart(T*, unsigned int) [with T = std::basic_string&lt;char&gt;*]
../counterpart.h:14:2: Anmerkung:   keine bekannte Umwandlung für Argument 1 von »std::string* {aka std::basic_string&lt;char&gt;*}« nach »std::basic_string&lt;char&gt;**«
../counterpart.h:12:7: Anmerkung: Counterpart&lt;std::basic_string&lt;char&gt;*&gt;::Counterpart(const Counterpart&lt;std::basic_string&lt;char&gt;*&gt;&amp;)
../counterpart.h:12:7: Anmerkung:   Kandidat erwartet 1 Argument, 2 angegeben
../scan_site.cpp: In Funktion »void scan_zdf(MYSQL*)«:
../scan_site.cpp:137:28: Warnung: extended initializer lists only available with -std=c++0x or -std=gnu++0x [standardmäßig aktiviert]
</code></pre>
<p>Wo liegt das Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/291639/template-mit-string-array-besetzen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 13:58:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291639.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Aug 2011 16:04:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template mit String-Array besetzen on Tue, 23 Aug 2011 16:05:15 GMT]]></title><description><![CDATA[<p>Ich habe Probleme bei folgender Klasse (gekürzt auf Problemfeld) und deren Benutzung:<br />
counterpart.h</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class Counterpart {
public:
	Counterpart(T *object, unsigned size_tmp);
private:
	T *object;
	const unsigned size;
	unsigned count;
};
</code></pre>
<p>counterpart.cpp</p>
<pre><code class="language-cpp">template&lt;class T&gt;
Counterpart&lt;T&gt;::Counterpart( T *object, unsigned size_tmp) : size(size_tmp) {
	this.object = object;
	count = 0;
}
</code></pre>
<p>Hier ist der Teil in der der Code zur Anwendung kommt:</p>
<p>irgendwas.cpp</p>
<pre><code class="language-cpp">Counterpart&lt;string *&gt; counterpart_az (
	new string[9] {
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;),
		string(&quot;bliblablub&quot;)
	}, 9
);
</code></pre>
<p>Wenn ich das jetzt compiliere, bekomme ich folgende Fehler-Meldung vom Compiler</p>
<pre><code>../scan_site.cpp:29:1: Fehler: keine passende Funktion für Aufruf von »Counterpart&lt;std::basic_string&lt;char&gt;*&gt;::Counterpart(std::string*, int)«
../scan_site.cpp:29:1: Anmerkung: Kandidaten sind:
../counterpart.h:14:2: Anmerkung: Counterpart&lt;T&gt;::Counterpart(T*, unsigned int) [with T = std::basic_string&lt;char&gt;*]
../counterpart.h:14:2: Anmerkung:   keine bekannte Umwandlung für Argument 1 von »std::string* {aka std::basic_string&lt;char&gt;*}« nach »std::basic_string&lt;char&gt;**«
../counterpart.h:12:7: Anmerkung: Counterpart&lt;std::basic_string&lt;char&gt;*&gt;::Counterpart(const Counterpart&lt;std::basic_string&lt;char&gt;*&gt;&amp;)
../counterpart.h:12:7: Anmerkung:   Kandidat erwartet 1 Argument, 2 angegeben
../scan_site.cpp: In Funktion »void scan_zdf(MYSQL*)«:
../scan_site.cpp:137:28: Warnung: extended initializer lists only available with -std=c++0x or -std=gnu++0x [standardmäßig aktiviert]
</code></pre>
<p>Wo liegt das Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109732</guid><dc:creator><![CDATA[tupolew]]></dc:creator><pubDate>Tue, 23 Aug 2011 16:05:15 GMT</pubDate></item><item><title><![CDATA[Reply to Template mit String-Array besetzen on Tue, 23 Aug 2011 16:09:26 GMT]]></title><description><![CDATA[<p>Der Konstruktor von Counterpart&lt;T&gt; erwartet einen Zeiger auf T - wenn du als Template-Parameter einen Pointer (string*) verwendest, benötigst du dort einen Zeiger auf Zeiger (also string**).</p>
<p>(Was soll eigentlich der Sinn der Konstruktion sein? Und was spricht gegen std::vector&lt;&gt; und Kollegen?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109733</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 23 Aug 2011 16:09:26 GMT</pubDate></item><item><title><![CDATA[Reply to Template mit String-Array besetzen on Tue, 23 Aug 2011 16:10:01 GMT]]></title><description><![CDATA[<blockquote>
<p>Counterpart(T *object, unsigned size_tmp);</p>
</blockquote>
<p>Setz da doch für T mal deinen Typen ein (string*). Welchen Typ hat dann object, und was übergibst du.<br />
Übrigens steht das auch da in der Fehlermeldung. Die sehen zwar oft schlimm aus, aber man kann sie tatsächlich lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109734</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Tue, 23 Aug 2011 16:10:01 GMT</pubDate></item><item><title><![CDATA[Reply to Template mit String-Array besetzen on Tue, 23 Aug 2011 16:57:51 GMT]]></title><description><![CDATA[<p>Gibt nicht new einen Zeiger auf den von ihm reservierten Speicherbereich zurück und das string[9] Objekt ist praktisch das Template &lt;string *&gt;.</p>
<p>Wegen der Frage von CStoll, ich durchsuche mit meinem Programm eine Webseite und und füttere damit eine Datenbank. Da das Programm mit Threads arbeiten soll muss der main-thread sowie die zusätzlichen Threads solbald sie nichts mehr zu tun haben, also die html-seite heruntergeladen durchsucht und das Ergebnis in einer Datenbank gespeichert hat die nächste Url anfordern. Da der Main-Thread auch mit dem durchsuchen beschäftigt ist erstelle ich ein globales Objekt bei dem die Threads schauen können ob noch eine Url verfügbar ist und wenn ja eine anfordern können.</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class Counterpart {
public:
	Counterpart(T *object, unsigned size_tmp);
	T *get_object();
	bool check_for_object() { return count &lt;= size; }
	virtual ~Counterpart();
private:
	T *object;
	const unsigned size;
	unsigned count;
};
</code></pre>
<p>Das Programm muss je nachdem in welchen Arbeitsschritt das Programm ist, bestimmte html-seiten von der Website durchsuchen, und brauch für die Datenbank eine Unterschiedliche Anzahl von Zusatzinformationen daher das Template.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109748</guid><dc:creator><![CDATA[tupolew]]></dc:creator><pubDate>Tue, 23 Aug 2011 16:57:51 GMT</pubDate></item><item><title><![CDATA[Reply to Template mit String-Array besetzen on Tue, 23 Aug 2011 17:15:27 GMT]]></title><description><![CDATA[<p>tupolew schrieb:</p>
<blockquote>
<p>Gibt nicht new einen Zeiger auf den von ihm reservierten Speicherbereich zurück und das string[9] Objekt ist praktisch das Template &lt;string *&gt;.</p>
</blockquote>
<p>Ja, new[] liefert einen Zeiger auf std::tring - dein Konstruktor benötigt aber einen Zeiger auf einen Zeiger.</p>
<p>PS: Und das Anwendungsszenario kann imho problemlos mit STL-Containern gelöst werden, auf den ersten Blick würde ich eine std::queue&lt;&gt; verwenden (eventuell mit einem Wrapper darum, der sich um die Thread-Sicherheit kümmert).</p>
<p>Edit: Nur ein kleiner Tip: Wenn du in deinem Nutzerprofil die Option &quot;BBCode immer aktivieren&quot; einschaltest, sieht man auch deine Code-Formatierungen <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109753</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 23 Aug 2011 17:15:27 GMT</pubDate></item><item><title><![CDATA[Reply to Template mit String-Array besetzen on Tue, 23 Aug 2011 17:13:39 GMT]]></title><description><![CDATA[<p>tupolew schrieb:</p>
<blockquote>
<p>Wo liegt das Problem?</p>
</blockquote>
<p>Dein Templateparameter ist falsch.<br />
Sollte sicher</p>
<pre><code class="language-cpp">Counterpart&lt;string&gt; counterpart_az (
    new string[9] {
        string(&quot;bliblablub&quot;),
        string(&quot;bliblablub&quot;),
        string(&quot;bliblablub&quot;),
        string(&quot;bliblablub&quot;),
        string(&quot;bliblablub&quot;),
        string(&quot;bliblablub&quot;),
        string(&quot;bliblablub&quot;),
        string(&quot;bliblablub&quot;),
        string(&quot;bliblablub&quot;)
    }, 9
);
</code></pre>
<p>heißen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109754</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 23 Aug 2011 17:13:39 GMT</pubDate></item><item><title><![CDATA[Reply to Template mit String-Array besetzen on Tue, 23 Aug 2011 17:46:46 GMT]]></title><description><![CDATA[<p>Danke für den Tipp mit std::queue, die Klasse werde ich verwenden. Aber da man aus Fehlern lernen soll, möchte ich den Fehler in meiner Klasse beheben. Ursprünglich hatte ich in der Klassendeklaration folgenden Quellcode:</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class Counterpart {
public:
	Counterpart(T object_tmp, unsigned size_tmp);
	T *get_object();
	bool check_for_object() { return count &lt;= size; }
	virtual ~Counterpart();
private:
	T *object;
	const unsigned size;
	unsigned count;
};
</code></pre>
<p>Aber dann kam folgende Fehlermeldung die mich ziemlich verwirrt hat und dann irgendwann der Scheiß mit den doppelten Pointer rauskahm.</p>
<pre><code>g++ -L/usr/lib/mysql -o &quot;netzwerk&quot;  ./counterpart.o ./database.o ./main.o ./scan_site.o   -lmysqlclient -lboost_regex -lcurl
./scan_site.o: In function `__static_initialization_and_destruction_0':
/home/tupolew/workspace/netzwerk/Debug/../scan_site.cpp:17: undefined reference to `Counterpart&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;*&gt;::Counterpart(std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;*, unsigned int)'
/home/tupolew/workspace/netzwerk/Debug/../scan_site.cpp:17: undefined reference to `Counterpart&lt;std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;*&gt;::~Counterpart()'
collect2: ld gab 1 als Ende-Status zurück
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2109763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109763</guid><dc:creator><![CDATA[tupolew]]></dc:creator><pubDate>Tue, 23 Aug 2011 17:46:46 GMT</pubDate></item><item><title><![CDATA[Reply to Template mit String-Array besetzen on Tue, 23 Aug 2011 19:05:15 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Templates müssen komplett im Header definiert sein, s. auch FAQ-Beitrag <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39467.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109790</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 23 Aug 2011 19:05:15 GMT</pubDate></item><item><title><![CDATA[Reply to Template mit String-Array besetzen on Thu, 25 Aug 2011 06:34:17 GMT]]></title><description><![CDATA[<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2110422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2110422</guid><dc:creator><![CDATA[tupolew]]></dc:creator><pubDate>Thu, 25 Aug 2011 06:34:17 GMT</pubDate></item></channel></rss>