2013-12-13 87 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 a 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*

相关问题