C++ VS 2010 - Type1 to Type2

18/12/2010 - 16:13 von Ljuba | Report spam
Hallo,

den alten Code (lauffàhig) muss ich anpassen und dabei habe ich folgenden
Problem:

Außerhalb der Klasse
void XYZtermSource(j_decompress_ptr);

void XYZtermSource(j_decompress_ptr /* cinfo */)
{
}


in einer Klasse wird ...

volatile XYZSourceMngStruct *src = NULL;
pSrc = new XYZSourceMngStruct ();
...
pSrc->pub,init_source = XYZtermSource; <= Fehler: C2440: '=' :
cannot convert from 'void (__cdecl *)(j_decompress_ptr)' to 'void (__cdecl
*volatile )(void)


variable init_source definiert mit JMETHOD(void, init_source,
(j_decompress_ptr cinfo))
b.z.w. JMETHOD ist mit
#define JMETHOD(type,methodname,arglist) type (*methodname) ()



Danke für jeden Tipp
Ljuba
 

Lesen sie die antworten

#1 Ulrich Eckhardt
20/12/2010 - 08:32 | Warnen spam
Ljuba wrote:
Außerhalb der Klasse
void XYZtermSource(j_decompress_ptr);


[...]
volatile XYZSourceMngStruct *src = NULL;
pSrc = new XYZSourceMngStruct ();



Gleich zwei Fragen hier:
0. Was ist 'pSrc'? Ich vermute mal es ist einfach 'src' gemeint...
1. Warum initialisierst Du mit Null und ueberschreibst dann mit "new .."?
2. Warum ist src ein Zeiger auf ein "volatile" Objekt? Ist das ueberhaupt
relevant fuer Dein Problem?

pSrc->pub,init_source = XYZtermSource;



Was ist das, warum wird erst src->pub referenziert und dann in init_source
(und was ist das wieder?) geschrieben?

Fehler: C2440: '=' : cannot convert from
'void (__cdecl *)(j_decompress_ptr)' to
'void (__cdecl *volatile )(void)



Die linke Seite der Zuweisung ist ein anderer Typ von Funktionszeiger als
die rechte. Zusaetzlich ist sie noch "volatile", aber das ist in diesem
Fall egal weil "cv-qualifier" automatisch hinzugefuegt werden.

variable init_source definiert mit JMETHOD(void, init_source,
(j_decompress_ptr cinfo))
b.z.w. JMETHOD ist mit
#define JMETHOD(type,methodname,arglist) type (*methodname) ()



Wenn Du das erstmal aufloest waere es erstens fuer Dich einfacher das
Problem zu verstehen und separat zu loesen und zweitens fuer alle anderen
auch.

Ich bezweifele uebrigens dass das ganze vorher ohne Probleme compiliert hat,
nicht mit dem strikten Typsystem von C++.

Uli

Domino Laser GmbH
Geschàftsführer: Thorsten Föcking, Amtsgericht Hamburg HR B62 932

Ähnliche fragen