clang 不识别受保护的数据成员
clang does not recognize protected data members
我正在将一些遗留代码从 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++ 我不经常使用 protected 并且可以重写不使用的代码,但我仍然想知道为什么 Clang 在这里抱怨,因为 Derived class 应该能够看到 protected基地成员class。我错过了什么?
unique_ptr
s 不可复制,您正试图将它们复制到 Base
的构造函数中,这应该是您尝试修复的第一个错误,之后的所有内容都可能会自动修复,如果你看看你在 clang 输出中得到的第一个错误并修复它
正如评论中指出的那样,sb_
是指针而不是引用,您应该在其上使用 ->
运算符,而不是 .
所以更改 sb_->number()
到 sb_->number()
尝试this->sb_->number()
。
When should I make explicit use of the `this` pointer?
我正在将一些遗留代码从 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++ 我不经常使用 protected 并且可以重写不使用的代码,但我仍然想知道为什么 Clang 在这里抱怨,因为 Derived class 应该能够看到 protected基地成员class。我错过了什么?
unique_ptr
s 不可复制,您正试图将它们复制到 Base
的构造函数中,这应该是您尝试修复的第一个错误,之后的所有内容都可能会自动修复,如果你看看你在 clang 输出中得到的第一个错误并修复它
正如评论中指出的那样,sb_
是指针而不是引用,您应该在其上使用 ->
运算符,而不是 .
所以更改 sb_->number()
到 sb_->number()
尝试this->sb_->number()
。
When should I make explicit use of the `this` pointer?