2010-06-22 5 views
1

Je possède ce type:C++ Casting Type: erreur C2440: '=': ne peut pas convertir 'short *' à 'DCTBLOCK'

typedef short DCTELEM; 
typedef DCTELEM DCTBLOCK[64]; 

Tableau de dernier type et un pointeur vers un tableau malloc de courts métrages:

DCTBLOCK MQUAD; 
short * ptrArray; 

J'ai besoin de MQUAD pour parier sur un emplacement spécifique pointé par ptrArray;

Dans CI serait prolly écrire quelque chose comme

MQUAD = ptrArray + 3 * 2; 

et ont MQUAD après pointant vers un emplacement nécessaire, mais je reçois

erreur C2440: '=': ne peut pas convertir « court * 'à' DCTBLOCK '

en C++, parce que je sais qu'il y a une différence dans un type de tableau et un pointeur vers un certain type.

Répondre

1

Votre variable MQUAD est un tableau, pas un pointeur, donc vous ne pouvez pas l'assigner (merci au commentaire de Remy Lebeau). Si vous déclarez comme:

DCTELEM *MQUAD; 

vous pouvez lui assigner:

MQUAD = reinterpret_cast<DCTELEM *>(ptrArray + 3 * 2); 

Ce utilise la syntaxe C cast de. Vous pouvez utiliser la syntaxe C cast si vous le souhaitez aussi.

+0

MQUAD est une variable de tableau, pas une variable de pointeur. Vous ne pouvez pas lui affecter une valeur de pointeur. Si Anton veut que MQUAD pointe vers un emplacement à l'intérieur des courts métrés qui sont pointés par la variable ptrArray, alors MQUAD doit être déclaré comme DCTELEM * ou short * pour commencer. –

+0

@Remy Lebeau: En effet, tout à fait raison. Je vais mettre à jour ma réponse. –

+0

Oui, totalement rigth, j'ai juste réalisé, 1 minutes avant d'ouvrir cette fenêtre :). – Anton

0

L'erreur principale est

DCTBLOCK MQUAD // it's wrong 
DCTELEM* MQUAD // it's right 

et vous pouvez jeter comme tu veux

MQUAD = ptrArray + 3 * 2; 
Questions connexes