Problem mit SparseLib++
-
RobertSp schrieb:
Sorry dass ich mich so blöd anstelle. Hier nochmal die Datei mvvc.h. In der dann die folgenden Fehlermeldungen auftreten:
Der Fehler wirkt sich zwar erst dort aus, liegt aber voraussichtlich an einer ganz anderen Stelle...
"error C2143: Syntaxfehler: Es fehlt ';' vor '<'"
Der Fehler das ein Semikolon fehlt, wird häufig durch ein vergessene Semikolon am Ende einer Klassendeklatation ausgelöst, die vor der entsprechenden Datei gelinkt wird.
-
Und wenn du jetzt auch noch sagen kannst, wo COMPLEX wie definiert wird, dann wirst du dein Problem wahrscheinlich selbst lösen können. Oder falls doch nicht, dann kann jemand hier helfen.
P.S.: Gibt es einen neuen IOCCC? Sieht fast wie ein Beitrag dafür aus

-
Jo das war der Fehler (bzw. compiliert das Programm jetzt zumindest).
Hab in der vecdefs.h die Zeile#define COMPLEX std::complex<double>
vergessen.
Danke fürs Erste...
-
Die Bemerkung mit dem IOCCC-Beitrag war natürlich ironisch gemeint, aber es fehlt nicht viel. Weißt du, was typedef macht?
-
Naja mit dem IOCCC hast schon irgendwie recht...

War nur in Panik, weil ich an dem Problem schon eine Weile rummach und die Abgabe der DA rückt näher!Hab 'ne ungefähre Ahnung davon was typedef macht, bin aber kein Spezialist auf dem Gebiet der Informatik. Oder hat man das schon gemerkt?

-
Ich sag mal so: Mit etwas weniger Makrodefinitionen findet man solche Fehler viel leichter. Für zentrale Definitionen wie du sie mit Makros machst, gibt es dann typedef, const und ein paar andere Sachen.
-
Guten Morgen,
bekomm jetzt beim initialisieren einer Matrix folgende Fehlermeldungen:
Fehler 1 SL++ Kurztest.obj error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CompRow_Mat_double::CompRow_Mat_double(int,int,int,double *,int *,int *,int)" (??0CompRow_Mat_double@@QAE@HHHPANPAH1H@Z)" in Funktion "_wmain".
Fehler 2 SL++ Kurztest.obj error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall MV_Vector_double::~MV_Vector_double(void)" (??1MV_Vector_double@@QAE@XZ)" in Funktion ""public: __thiscall CompRow_Mat_double::~CompRow_Mat_double(void)" (??1CompRow_Mat_double@@QAE@XZ)".
Fehler 3 SL++ Kurztest.obj error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall MV_Vector_int::~MV_Vector_int(void)" (??1MV_Vector_int@@QAE@XZ)" in Funktion ""public: __thiscall CompRow_Mat_double::~CompRow_Mat_double(void)" (??1CompRow_Mat_double@@QAE@XZ)".
Fehler 4 D:\Spangler\MS Visual Studio\SL++ Kurztest\Debug\SL++ Kurztest.exe 1 fatal error LNK1120: 3 nicht aufgelöste externe Verweise.Und der Code dazu:
double val[] = {1.0, 4.0, 5.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0};
int colind[] = {0, 0, 1, 1, 2, 2, 3, 0, 4 };
int rowptr[] = {0, 1, 3, 5, 7, 9};CompRow_Mat_double M(5,5,9,val,rowptr,colind);
int m = M.dim(0), n = M.dim(1);Ist nur der Code aus einer Testdatei, die beim Compilieren unter Cygwin (G++-Compiler) einwandfrei ausgeführt wird.
Fehlt da noch ein Verweis auf eine *.lib? In dem /lib-Ordner von SparseLib++ befinden sich 3 *.a Dateien, die in Cygwin mit dem make-Befehl erstellt worden sind. Muss ich die noch in *.dll-Dateien umwandeln, um sie in VC++ einbinden zu können?
Wenn ja, wie funktioniert so was?
-
du musst die fkt auch definieren und nicht nur deklarieren:
CompRow_Mat_double::CompRow_Mat_double(int,int,int,double *,int *,int *,int)
MV_Vector_double::~MV_Vector_double(void)
etc.den Rest erkennst du jz hoffentlich selbst^^
bb
-
Nein das kann nicht das Problem sein. Die Funktion wird in der Klasse CompRow_Mat_double definiert:
class CompRow_Mat_double {
private:
VECTOR_double val_; // data values (nz_ elements)
VECTOR_int rowptr_; // row_ptr (dim_[0]+1 elements)
VECTOR_int colind_; // col_ind (nz_ elements)int base_; // index base: offset of first element
int nz_; // number of nonzeros
int dim_[2]; // number of rows, colspublic:
CompRow_Mat_double(void);
CompRow_Mat_double(const CompRow_Mat_double &S);
CompRow_Mat_double(const CompCol_Mat_double &C);
CompRow_Mat_double(const Coord_Mat_double &CO);
CompRow_Mat_double(int M, int N, int nz, double *val, int *r,
int *c, int base=0);
CompRow_Mat_double(int M, int N, int nz, const VECTOR_double &val,
const VECTOR_int &r, const VECTOR_int &c,
int base=0);
~CompRow_Mat_double() {};
...
}
-
Abgesehen von Destruktor sind das alles Funktionsdeklarationen..