error: incompatible types in assignment
-
Bekomme bei folgendem Code folgende Fehler:
[cpp]void myqsort(void* pBase,int anz, int width, int (*fkt)(const void* poi_01, const void* poi_02))
{
char(* pData)[width] = pBase; /*Größe des übergebenen Datentyps*/
char(* pTmp)[width];
int mitte=0;
int i; /*Schleifenzählvariable*/mitte=anz/2; /* springe in die Mitte*/
for(i=0;i<mitte-1;i++)
{if(fkt(&pData[i],&pData[anz-i-1])>0)
{
pTmp = pData[i]; /(110)/
pData[i] = pData[anz-i-1]; /(111)/
pData[anz-i-1] = pTmp; /(112)/
}}
}[/cpp]
qsort.c: In function `myqsort':
qsort.c:110: warning: assignment from incompatible pointer type
qsort.c:111: error: incompatible types in assignment
qsort.c:112: error: incompatible types in assignmentWoran liegt das? HAb leider keine Ahnung, sind doch eigentlich vom gleichen Typ oder?
-
so sollte es funktionieren:
char* pData = pBase; char pTmp;
char(* pData)[width] = pBase; /*Größe des übergebenen Datentyps*/
kannst du machen, ist aber witzlos.
-
Also, diese Fkt. soll die Standartfkt. qsort nachahmen.
Sie sortiert einen beliebigen Vektor von Daten.
Um immer um dir richtige Größe weiter zu springen hab ich mir gedacht ich richte einen Pointer vom typ char ein, der auf daten der Größe width zeigt.char(* pData)[width] = pBase; /*Größe des übergebenen Datentyps*/ char(* pTmp)[width];
Deshalb bringt das Vereinfachen auf
char* pData = pBase; char pTmp;
leider nix, da nur um die Größe eines char weitergesprungen wird.
Das Prinzip der Deklarationsgröße klappt auch, hab ich überprüft.
Versteh nur nicht, warum das Vertauschen der Zeiger nicht klappt. Schließöich representiert ein Vektorname doch seine erste Adresse oder?
Vorallem warum sind es incompatible Typen bei der Zuweisung, sind doch vom gleichen Typ?
Mal noch was anderes: warum kann ich das
char(* pData)[width] = pBase;
unter Linux schreiben unter Windows aber nicht?
Fehler: "Konstanter Ausdruck erwartet" und "Reservierung eines Feldes der konstanten Groesse 0 nicht moeglich"
Wie kann ich das vermeiden?