2013-12-13 2 views
3

До сих пор я попытался это, но я все еще получаю ошибку в коде ниже:Как преобразовать const unsigned short в unsigned short?

#include<iostream> 
typedef unsigned short unichar; 
typedef const unichar unimap_t[2]; 
unimap_t x = {0x0004,0x00ff}; 

const unimap_t * ret() 
{ 

    return x; 
} 
int main() 
{ 
    unsigned short* pX2 = const_cast < unsigned short* > (ret()); 
    std::cout <<pX2[1]; 
    return 0; 
} 

Я получаю следующее сообщение об ошибке.

a.cpp: In function ‘int main()’: 
sa.cpp:22:60: error: invalid const_cast from type ‘const unichar (*)[2] 
    {aka const short unsigned int (*)[2]}’ to type ‘short unsigned int*’` 
+2

Почему это проголосовали? Вопрос ясен, на плакате показан код. И это вопрос с вопросом практического программирования. – hetepeperfan

+0

@hetepeperfan: На самом деле вопрос непонятен. Название спрашивает, как сделать одно (преобразовать 'const unsigned short' в' unsigned short'), но в коде он пытается сделать что-то совсем другое ('convert const unsigned short (*) [2]' к 'unsigned short *'). Это не значит, что он заслуживает ниспроверки, это честная ошибка, но это определенно нуждается в некоторых разъяснениях. –

ответ

0

Изменение функции ret() вернуть указатель на x:

const unimap_t *ret() 
{ 
    return &x; 
} 

и добавить переинтерпретировать ролях:

int main() { 
    unsigned short* pX2 = const_cast < unsigned short* >(
      reinterpret_cast<const unsigned short*>(ret()) 
      ); 
    std::cout <<pX2[1]; 
    return 0; 
} 
+0

Это не работает, я все равно получаю ту же ошибку – Venkatesan

+0

@Venkatesan, обновленный – perreal

+1

Я думаю, вы имеете в виду 'unichar const *' для возвращаемого типа функции. Если вам нужно 'reinterpret_cast', вы делаете что-то неправильно. –

2

Во-первых, вы не возвращая unsigned short*, но unsigned short (*)[2], указатель на массив из 2 unsigned short. Это, вероятно, не то, что вы хотите; подпись вашей функции, вероятно, следует:

unichar const* ret(); 

(массивы типа C фундаментально сломаны, и представляет особый случай в системе типа.) В качестве альтернативы, вы можете хотите вернуть ссылку:

unimap_t const& ret(); 

Это должно преобразовать в unsigned short const*.

Смежные вопросы