我有以下模板化类MyObjectSmallObject。在下面,我有一个MyObject的构造函数,该构造函数将 vector 作为输入并将 vector 中的每个项目转换为SmallObject。但是,当它在测试中运行时,对于没有匹配的构造函数,它将返回错误。
我不知道出什么问题了,我的猜测是我从 vector 中提取的值不是T类型的,但是我不知道怎么回事。这也是相关部分的简化代码,因此不必担心它对SmallObj并没有执行任何操作并泄漏内存

template<typename T>
SmallObj<T>::SmallObj(T& value) : _value(value) {}

template<typename T>
MyObject<T>::MyObject(const std::vector<T>& values) {
  int n = values.size();

  for (int i = 0; i < n; i++) {
    SmallObject<T>* node = new SmallObject<T>(values[i]); // error: no matching constructor
  }
}

最佳答案

将参数values传递为对const的引用,然后values[i]返回const T&。虽然SmallObj的构造函数引用了无法绑定(bind)到常量的非常量。如果不应该修改参数,则可以更改构造函数以引用const

template<typename T>
SmallObj<T>::SmallObj(const T& value) : _value(value) {}

关于c++ - 错误:尝试从 vector 值构造模板化对象时,没有匹配的构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64656428/

10-11 17:45