clang不承认受保护的数据成员

时间:2017-05-29 14:37:01

标签: c++ visual-c++ clang++

我正在将一些遗留代码从MS visual studio移植到Clang,并遇到受保护数据成员的问题。简而言之,我的问题是:

template<typename T>
class Base : public SuperBase<T> {
public:
  Base(std::shared_ptr<Widget<T>> const& sb) : sb_(sb) {}

protected:
  std::shared_ptr<Widget<T>> sb_;
}

template <typename T>
class Derived : public Base<T>
{
public:
  Derived(std::shared_ptr<Widget<T>> const& sb) : Base<T>(sb) {}

  double method(void) const { return sb_->number(); }
}

这在MSVC ++下编译得很好,但在Clang下没有编译。 Clang抱怨道:

使用未声明的标识符sb _。

关注Meyers Effective C ++我不会使用受保护的东西并且可以重写不使用的代码,但我仍然想知道为什么Clang会在这里抱怨,因为Derived类应该能够看到Base的受保护成员类。我错过了什么?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

unique_ptr是不可复制的,你试图在Base的构造函数中复制它们,这应该是你尝试修复的第一个错误,之后的所有内容如果你看起来可能会自动修复在clang输出中出现的第一个错误并修复

正如评论中指出的那样,sb_是一个指针,而不是一个引用,您应该在其上使用->运算符,而不是.所以更改sb_->number() } sb_->number()