2016-02-17 134 views
0

我想一个为size_t分配到这个容器:如何将类型size_t的指针转换为枚举指针?

std::vector <nts::Tristate *> _components; 

要做到这一点,我想投const size_t &nts::Tristate *

this->_components[0] = static_cast<nts::Tristate *>(&value); 

但我有以下错误:

error: invalid static_cast from type ‘const size_t* {aka const long unsigned int*}’ to type ‘nts::Tristate*’ 
    this->_components[0] = static_cast<nts::Tristate *>(&value); 

有什么想法为什么?

回答

5

不问为什么你想要做这样的事情,问题是这两种类型(size_t*nts::Tristate*)完全无关,和你需要reinterpet一个类型为其他。你用reinterpret_cast做事。

应该指出,做这样的事情很可能会导致其他问题的发展,导致未定义行为的问题。你需要注意的事情之一是如果value是一个局部变量,因为那么你存储一个指向这个局部变量的指针,它将超出范围并消失。另一个是,使用_components[0]的程序的其余部分需要知道它实际上不是指向nts::Tristate对象的指针,而是指向size_t值的指针。总之,你在做什么是非常危险的。