来自'void * - 转换的无效转换

时间:2015-12-25 19:39:15

标签: c++ casting

我遇到了一个代码问题,在gcc下编译时没有问题,但没有g ++编译。我正在转向g ++,因为我想利用boost来进行一些多线程改进。我得到的错误是这样的:

invalid conversion from 'void* volatile' to 'TrialVect*'

这段代码是:

static void funcSize( struct TrialVect *vector ) {
  if ( vector->field ) {
    struct TrialVect *ptr = BO2V (vector->first,vector->second);
   }
}

当我用谷歌搜索时,铸造变量存在一些问题,为什么?建议如何解决?

1 个答案:

答案 0 :(得分:2)

在C ++中,任何指针都可以隐式转换为转换为 void*,但转换来自 void*需要显式转换。

试试这个:

auto ptr = static_cast<TrialVect* volatile>( BO2V (vector->first,vector->second) );

volatile是必须单独处理的属性(如const);新指针必须与旧指针匹配,或者您可以使用单独的const更改volatile / const_cast属性。例如,

auto ptr = static_cast<TrialVect*>( const_cast<void*>( BO2V(vector->first, vector->second) ) );

删除volatile属性是否安全取决于应用程序。