static char* fälschlicherweise als int* interpretiert
-
Hi!
Verwende Visual Studio 2005. In meinem Programm hat bis jetzt alles gut funktioniert.Hab die Vorgabe, in einer neuen Klasse (ColorSpaces) eine static Memberfunktion zu erzeugen, die einen Buffer von der Klasse (MSImage) erhält, diesen manipuliert und zurückgibt.
In der Klasse ColorSpaces habe ich zb folgende Funktion:
static char* calculateLab(MSImage* image);Übergabe sieht folgendermaßen aus:
MSImage msimage; ColorSpaces::calculateLab(&msimage); // (*(* warum wird calculateLab als
int* ColorSpaces::calculateLab(void)interpretiert und nicht wie die Definition der Memberfunktion?
Und warum bekomm ich folgende Fehlermeldung:
error LNK2001: unresolved external symbol "public: static char * __cdecl ColorSpaces::calculateLab(class MSImage *)" (?calculateLab@ColorSpaces@@SAPADPAVMSImage@@@Z)Headers sind inkludiert, Libraries sind eingebunden.
Wär super, wenn mir jemand weiterhelfen könnte.Danke!
Adamn
-
ich glaub du musst noch etwas mehr code zeigen. Was meinst du mit als int* ... interpretiert? Kompilierfehler gibts ja so weit ich seh nciht.
Zeit mal deine Klasse, also definition mit der deklaration der methode, andere kann man ja aussparen. Und zeige genau den Aufruf mit umgebendem code und dann zeig noch die ersten und letzten paar zeilen von CalculateLab
-
Du hast die Definition der Funktion vergessen oder falsch gemacht.
Das muss in der .cpp Datei stehen.char* ColorSpaces::calculateLab(MSImage* image) { //meine definition return 0; }
-
templäd schrieb:
Du hast die Definition der Funktion vergessen oder falsch gemacht.
Das muss in der .cpp Datei stehen.char* ColorSpaces::calculateLab(MSImage* image) { //meine definition return 0; }Genau das steht dort drinnen. Das Problem besteht jedoch immer noch!
Klasse ColorSpaces sieht so aus:
class ColorSpaces { public: ColorSpaces(); virtual ~ColorSpaces(void); // returns a buffer, where the L,a,b values of a given MSImage are stored static char* calculateLab(MSImage* image); static char* calculateLuv(MSImage* image); static char* calculateRG(MSImage* image); };In ColorSpaces.cpp passiert noch nicht viel:
ColorSpaces::ColorSpaces() { } // ---------------------------------------------------------------------------- ColorSpaces::~ColorSpaces(void) { } char* ColorSpaces::calculateLab(MSImage* image) { // cout << image->data3D << endl; } char* ColorSpaces::calculateLuv(MSImage* image) { } char* ColorSpaces::calculateRG(MSImage* image) { }Maxi schrieb:
Was meinst du mit als int* ... interpretiert?
In Visual Studio gibts die nette Funktion, wenn man über zb eine Funktion anfokusiert, wird dessen Signatur gezeigt. Wenn ich zb. in main() schreibe:
ColorSpaces::calculateLab(&msimage);und über calculateLab fahre, dann steht
int* ColorSpaces::calculateLab(void)und nicht
char* ColorSpaces::calculateLuv(MSImage* image)In main wird aufgerufen:
MSImage msimage(str,false); // adamn: ascii false, colorspace RGB ColorSpaces::calculateLab(&msimage);File ist hier einfach der Filename und false eine lesespezifische Eigenheit, umd das File auslesen zu können. MSImage speichert die Bilddaten dann in
unsigned char*** data3D;Den ganzen Code zu posten wär einfach zuviel und unübersichtlich. Ich hab gelesen, dass static members nicht nur definiert, sondern auch deklariert werden müssen, um den Compiler zu beruhigen. Compiler meint dann nur: member function redeclaration not allowed.
-
ja, static member müssen noch instanziert werden, static functions nicht.
Das das visual studio das so anzeigt is sicher einer der vielen bugs im VS. Aber kompilieren tut er ja, oder? Nur der Linker spinnt?
Hast du die Datei zum Projekt hinzugefügt?
-
Maxi schrieb:
ja, static member müssen noch instanziert werden, static functions nicht.
Das das visual studio das so anzeigt is sicher einer der vielen bugs im VS. Aber kompilieren tut er ja, oder? Nur der Linker spinnt?
Hast du die Datei zum Projekt hinzugefügt?
Die Rätsels Lösung:
class [b]__declspec(dllexport)[/b] ColorSpacesin der ColorSpaces.h ergänzen
