【发布时间】:2014-09-01 03:01:21
【问题描述】:
我正在将一大段代码从 gcc 移植到 Visual Studio 2013。以下代码示例在 gcc 4.4 上运行良好(!),但在 VS2013 上编译 begin() 和 end() 失败:
错误 C2440: '' : 无法从 'unsigned char *' 转换为 'std::_Vector_const_iterator>>'
class foo {
unsigned char* value;
int length;
std::vector<unsigned char>::const_iterator begin();
std::vector<unsigned char>::const_iterator end();
};
std::vector<unsigned char>::const_iterator foo::begin() {
return std::vector<unsigned char>::const_iterator(value);
}
std::vector<unsigned char>::const_iterator foo::end() {
return std::vector<unsigned char>::const_iterator(value + length);
}
鉴于我不想重写整个事情,有没有一种可移植的方式来创建这些 const_iterators?
【问题讨论】:
-
抱歉,您利用了 VS2013 中不存在的 gcc 实现细节。
const_iterator的定义不在您的控制范围内,它不包括获取任意指针的能力。 -
你能把类型从
std::vector<unsigned char*>::iterator改成const unsigned char*或者自定义迭代器吗? -
或者,如果
value总是来自一个向量,你能把它改成std::vector<unsigned char*>::iterator value;吗?
标签: c++ gcc stl visual-studio-2013 const-iterator