Приведение типов в C ++: ошибка C2440: «=»: невозможно преобразовать из «short *» в «DCTBLOCK» - PullRequest
1 голос
/ 22 июня 2010

У меня есть следующие типы:

typedef short DCTELEM;
typedef DCTELEM DCTBLOCK[64];

Массив последнего типа и указатель на массив шортов malloc:

DCTBLOCK MQUAD;
short * ptrArray;

Мне нужно MQUAD, чтобы делать ставки в определенное местона который указывает ptrArray;

В CI можно написать что-то вроде

MQUAD = ptrArray + 3 * 2;

, и после этого MQUAD указывает на нужное место, но я получаю

ошибка C2440: '=': невозможно преобразовать из 'short *' в 'DCTBLOCK'

в C ++, потому что я знаю, что существует разница в типе массива и указателе на некоторый тип.

Ответы [ 2 ]

1 голос
/ 22 июня 2010

Ваша переменная MQUAD является массивом, а не указателем, поэтому вы не можете назначить ее (благодаря комментарию Реми Лебо).Если вы объявите его как:

DCTELEM *MQUAD;

, тогда вы можете присвоить ему:

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

Это использует синтаксис C ++ cast.Вы можете использовать синтаксис C cast, если хотите.

0 голосов
/ 06 апреля 2017

Основная ошибка:

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

, и вы можете разыграть как хотите

MQUAD = ptrArray + 3 * 2;
...