未找到基础的构造函数

时间:2017-05-26 11:56:01

标签: c++ c++17 visual-studio-2017

#include <string_view>

class str_ref : public std::string_view
{
public:
  using std::string_view::string_view;
};

int main()
{
  std::string_view sv;
  str_ref sr("", 0);
  str_ref sr2(sv); // error C2664: 'str_ref::str_ref(const str_ref &)': cannot convert argument 1 from 'std::string_view' to 'const char *const '
}

为什么在这里找不到(string_view)的构造函数?不应该使用using语句导入此构造函数吗?正在找到(const char *,size_t)构造函数。 我正在使用VS2017。

1 个答案:

答案 0 :(得分:0)

  

不应该使用using语句导入此构造函数吗?

它已正确导入,但您必须自己在派生类中定义该构造函数 编译器不会自动生成类似于派生类的构造函数:

#include <string_view>

class str_ref : public std::string_view
{
public:
  using std::string_view::string_view;
  str_ref(const std::string_view& sv) : std::string_view(sv) {} // <<<<
};

int main()
{
  std::string_view sv;
  str_ref sr("", 0);
  str_ref sr2(sv);
}

请参阅Live Demo