【问题标题】:Constructor from base not found [duplicate]未找到来自基础的构造函数[重复]
【发布时间】:2017-10-27 07:32:59
【问题描述】:
#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。

【问题讨论】:

  • 因为它是一个模板类
  • @dgrat 你能详细说明一下吗?
  • @dgrat 不,不是。 std::string_viewstd::basic_string_view&lt;char, std::char_traits&lt;char&gt;&gt; 的完全专业化

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


【解决方案1】:

这个构造函数不应该用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

【讨论】:

  • 对不起,向明显重复的问题发布重复答案(是的,我看到代码)有什么意义?您可以关闭重复项,对吗?
  • @iehrlich 我在写答案时没有发现骗子。也有重复的赞成问题本质上并不是坏事。这些可以作为未来研究的路标。
  • 当然,没问题:)
猜你喜欢
  • 1970-01-01
  • 2012-01-02
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多