statische funktion in dll



  • Hallo zusammen

    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.
    Und wie es im Leben so ist, tauchen irgendwann Fehler auf, die als ein einziges Programm nie aufgetreten sind.
    Dabei verwende ich folgede OS, Tools:
    WinXP
    gcc-3.4.5 (MinGW version)
    als Programmierumgebung Eclipse (tut zu meiner Frage, aber nicht viel zur Sache, denke ich)

    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 "static" deklariert und auch alle im public definiert.

    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 ...

    void UtilsMTL4::CopyRows(mtl::dense2D<double>& 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<int> vec(nElements);
    
    	for (uli j=0;j<nElements;j++)
    		vec[j]=j;
    	UtilsMTL4::Rem(vec,uliNumRows);
    	for (uli j=0;j<nElements;j++)
    		vec[j] += 1; // add to each element 1
    
    	mtl::dense2D<double> mat(nElements,uliNumCols);
    	for (uli k=0;k<nElements;k++)
    		for (uli j=0;j<uliNumCols;j++)
    			mat(k,j) = m(vec[k]-1,j);
    
    	m.change_dim(nElements,uliNumCols);
    	m = mat;
    
    }//END OF void UtilsMTL4::CopyRows(mtl::dense2D<double>& m,unsigned long int i)
    

    Zeile 11 verursacht also den Fehler, aber alle Argumente sind richtig.
    Weiss jemand wieso dass so ist?

    Besten Dank für die Hilfe

    Michael



  • Hi,

    weiss nicht obs funktioniert aber versuchs mal mit UtilsMTL4::Rem(template<>vec,uliNumRows);



  • Besten Dank für deine Antwort.

    Leider funktioniert der Vorschlag nicht, aber ich habe soeben den Code
    umgestellt, d.h. einfach die Funktionen ans Ende der *.cpp Datei verschoben, nun funktioniert es.
    Zur Zeit verstehe ich leider noch nicht wieso, aber immerhin.

    Besten Dank nochmals.

    Gruss

    Michael


Log in to reply