c++ - 从 VS2015 升级到 VS2017 后编译错误
问题描述
将我的 VC++ 项目从 VS2015 升级到 VS2017 后,使用 VS2015 构建时没有构建错误。使用 VS2017 我收到以下构建错误:
(217): 错误 C2678: 二进制“*”: 未找到采用“const _Iter”类型的左侧操作数的运算符(或没有可接受的转换)
有问题的行是:
std::vector <WeakRef <int> > vc (weakref_adaptor (v.begin()), weakref_adaptor (v.end()));
WeakRef 和weakref_adaptor 定义如下:
template <class T>
class WeakRef
{
public:
explicit WeakRef (T* t)
: _ref (t)
{}
WeakRef (const WeakRef& r)
: _ref (r._ref)
{}
WeakRef& operator = (const WeakRef& r)
{
_ref = r._ref;
return *this;
}
~WeakRef ()
{
// Quite specifically, nothing to do: certainly not deleting _ref!
}
T& operator * () const
{
return *_ref;
}
T* operator -> () const
{
return _ref;
}
private:
T* _ref;
};
template < class Iterator, class Value = typename Iterator::value_type >
class weakref_adaptor_t
{
public:
typedef typename Iterator base_iterator;
typedef WeakRef <typename Value> value_type;
typedef typename base_iterator::difference_type difference_type;
typedef value_type* pointer;
typedef value_type& reference;
typedef std::forward_iterator_tag iterator_category;
weakref_adaptor_t (const base_iterator& base)
: _base (base)
{};
value_type operator * ()
{
return value_type (&(*_base));
}
private:
base_iterator _base;
};
template <class Iterator>
weakref_adaptor_t <Iterator> weakref_adaptor (const Iterator& i)
{
return weakref_adaptor_t <Iterator> (i);
}
template <class Iterator>
weakref_adaptor_t <Iterator, const typename Iterator::value_type>
const_weakref_adaptor (const Iterator& i)
{
return weakref_adaptor_t <Iterator, const Iterator::value_type> (i);
}
};
解决方案
推荐阅读
- oracle - 我如何处理 ORA-00917 错误异常块
- angular - NgRx 效果 - 映射操作以进行顺序服务调用和更新存储
- ios - 在后台下载图像
- javascript - 使用javascript替换特定位置的所有空格
- python - Python3字节编码
- angular - 在 Angular 5 中使用 Nativescript 的环境变量
- css - 如何使用多类更改子类的样式
- powershell - 带有 content.replace 的嵌套 foreach() 循环未按预期设置内容(或添加内容)
- css - 在全屏模式下使用 Google 地图看不到警报对话框
- r - 在R中迭代数据框