<?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[statische funktion in dll]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich habe vor einiger Zeit eine Software geschrieben, die sich mit neuronalen Netzen beschäftigt. Nun ist im Laufe der Zeit der Code zu sehr sehr vielen Zeilen angewachsen und ich habe das Projekt an diese Stelle gestoppt und redesigne den gesamten Code. Dabei lagere ich einiges in Bibliotheken aus. Da ich auf Windows (später auf Linux) programmiere, spreche ich hier also von dll's.<br />
Und wie es im Leben so ist, tauchen irgendwann Fehler auf, die als ein einziges Programm nie aufgetreten sind.<br />
Dabei verwende ich folgede OS, Tools:<br />
WinXP<br />
gcc-3.4.5 (MinGW version)<br />
als Programmierumgebung Eclipse (tut zu meiner Frage, aber nicht viel zur Sache, denke ich)</p>
<p>Nun möchte ich also eine Bibliothek erstellen, die ähnlich wie bei Matlab Funktionen zum verschieben, kopieren usw. von Zeilen oder Kolonnen von Matrizen ermöglicht. Diese Funktionen sind alle als &quot;static&quot; deklariert und auch alle im public definiert.</p>
<p>Nun verwende ich aber an drei Orten solche Funktionen, d.h. um eine neue Funktion zu schreiben, greiffe ich auf eine andere static Funktion dieser Klasse zu. Und das will mein Linker nicht schlucken. Er schreibt was von undefinierter Referenz ...</p>
<pre><code class="language-cpp">void UtilsMTL4::CopyRows(mtl::dense2D&lt;double&gt;&amp; m,unsigned long int i)
{
	///\todo this function should be programmed in ExpandMatrix ...
	uli uliNumRows = mtl::matrix::num_rows(m);
	uli uliNumCols = mtl::matrix::num_cols(m);
	uli nElements = uliNumRows*i;
	mtl::dense_vector&lt;int&gt; vec(nElements);

	for (uli j=0;j&lt;nElements;j++)
		vec[j]=j;
	UtilsMTL4::Rem(vec,uliNumRows);
	for (uli j=0;j&lt;nElements;j++)
		vec[j] += 1; // add to each element 1

	mtl::dense2D&lt;double&gt; mat(nElements,uliNumCols);
	for (uli k=0;k&lt;nElements;k++)
		for (uli j=0;j&lt;uliNumCols;j++)
			mat(k,j) = m(vec[k]-1,j);

	m.change_dim(nElements,uliNumCols);
	m = mat;

}//END OF void UtilsMTL4::CopyRows(mtl::dense2D&lt;double&gt;&amp; m,unsigned long int i)
</code></pre>
<p>Zeile 11 verursacht also den Fehler, aber alle Argumente sind richtig.<br />
Weiss jemand wieso dass so ist?</p>
<p>Besten Dank für die Hilfe</p>
<p>Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/240883/statische-funktion-in-dll</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 19:46:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240883.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 May 2009 05:37:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to statische funktion in dll on Wed, 13 May 2009 05:37:35 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich habe vor einiger Zeit eine Software geschrieben, die sich mit neuronalen Netzen beschäftigt. Nun ist im Laufe der Zeit der Code zu sehr sehr vielen Zeilen angewachsen und ich habe das Projekt an diese Stelle gestoppt und redesigne den gesamten Code. Dabei lagere ich einiges in Bibliotheken aus. Da ich auf Windows (später auf Linux) programmiere, spreche ich hier also von dll's.<br />
Und wie es im Leben so ist, tauchen irgendwann Fehler auf, die als ein einziges Programm nie aufgetreten sind.<br />
Dabei verwende ich folgede OS, Tools:<br />
WinXP<br />
gcc-3.4.5 (MinGW version)<br />
als Programmierumgebung Eclipse (tut zu meiner Frage, aber nicht viel zur Sache, denke ich)</p>
<p>Nun möchte ich also eine Bibliothek erstellen, die ähnlich wie bei Matlab Funktionen zum verschieben, kopieren usw. von Zeilen oder Kolonnen von Matrizen ermöglicht. Diese Funktionen sind alle als &quot;static&quot; deklariert und auch alle im public definiert.</p>
<p>Nun verwende ich aber an drei Orten solche Funktionen, d.h. um eine neue Funktion zu schreiben, greiffe ich auf eine andere static Funktion dieser Klasse zu. Und das will mein Linker nicht schlucken. Er schreibt was von undefinierter Referenz ...</p>
<pre><code class="language-cpp">void UtilsMTL4::CopyRows(mtl::dense2D&lt;double&gt;&amp; m,unsigned long int i)
{
	///\todo this function should be programmed in ExpandMatrix ...
	uli uliNumRows = mtl::matrix::num_rows(m);
	uli uliNumCols = mtl::matrix::num_cols(m);
	uli nElements = uliNumRows*i;
	mtl::dense_vector&lt;int&gt; vec(nElements);

	for (uli j=0;j&lt;nElements;j++)
		vec[j]=j;
	UtilsMTL4::Rem(vec,uliNumRows);
	for (uli j=0;j&lt;nElements;j++)
		vec[j] += 1; // add to each element 1

	mtl::dense2D&lt;double&gt; mat(nElements,uliNumCols);
	for (uli k=0;k&lt;nElements;k++)
		for (uli j=0;j&lt;uliNumCols;j++)
			mat(k,j) = m(vec[k]-1,j);

	m.change_dim(nElements,uliNumCols);
	m = mat;

}//END OF void UtilsMTL4::CopyRows(mtl::dense2D&lt;double&gt;&amp; m,unsigned long int i)
</code></pre>
<p>Zeile 11 verursacht also den Fehler, aber alle Argumente sind richtig.<br />
Weiss jemand wieso dass so ist?</p>
<p>Besten Dank für die Hilfe</p>
<p>Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709701</guid><dc:creator><![CDATA[schmidm6]]></dc:creator><pubDate>Wed, 13 May 2009 05:37:35 GMT</pubDate></item><item><title><![CDATA[Reply to statische funktion in dll on Wed, 13 May 2009 08:53:35 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>weiss nicht obs funktioniert aber versuchs mal mit UtilsMTL4::Rem(template&lt;&gt;vec,uliNumRows);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709800</guid><dc:creator><![CDATA[mamue110]]></dc:creator><pubDate>Wed, 13 May 2009 08:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to statische funktion in dll on Wed, 13 May 2009 09:18:12 GMT]]></title><description><![CDATA[<p>Besten Dank für deine Antwort.</p>
<p>Leider funktioniert der Vorschlag nicht, aber ich habe soeben den Code<br />
umgestellt, d.h. einfach die Funktionen ans Ende der *.cpp Datei verschoben, nun funktioniert es.<br />
Zur Zeit verstehe ich leider noch nicht wieso, aber immerhin.</p>
<p>Besten Dank nochmals.</p>
<p>Gruss</p>
<p>Michael</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709813</guid><dc:creator><![CDATA[schmidm6]]></dc:creator><pubDate>Wed, 13 May 2009 09:18:12 GMT</pubDate></item></channel></rss>