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下不能。叮当抱怨道:
使用未声明的识别符sb_。
遵循 Meyers Effective C++ 我不经常使用受保护的代码,并且可以重写代码以不使用,但我仍然想知道为什么 Clang 在这里抱怨,因为派生类应该能够看到 Base 类的受保护成员。我错过了什么?
试试this->sb_->number()
.
何时应显式使用"this"指针?
unique_ptr
是不可复制的,您正在尝试将它们复制到Base
的构造函数中,这应该是您尝试修复的第一个错误,之后的所有内容都可能会自动修复,如果您查看在 clang 输出中得到的第一个错误并修复它
此外,正如注释中指出的那样,sb_
是指针而不是引用,您应该在其上使用 ->
运算符,而不是.
因此sb_->number()
更改为sb_->number()
相关文章:
- C++:无法访问声明的受保护成员
- 继承和友元函数,从基类访问受保护的成员
- 为什么派生类的好友不能使用受保护的成员?
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 从模板化父类中的派生内部类访问受保护的成员变量
- 在使用受保护和继承时无法访问在类中声明的私有成员
- 同一模板类但模板类型的受保护成员
- 派生类无法访问基类的受保护成员
- 继承期间受保护成员的皮条
- 访问说明符(私有/公共/受保护)如何在内部工作(限制成员访问)?
- 无法访问派生类函数内的基类的受保护数据成员
- Clang 无法识别受保护的数据成员
- C 继承访问受保护的数据成员
- 尝试访问基类的受保护数据成员时出现编译错误
- 在子类函数中访问超类友元的受保护数据成员
- C++是否可以从同级第二个派生对象访问第一个派生对象的受保护基础数据成员?
- 模板化转换构造函数无法访问受保护的数据成员
- 受保护数据成员的替代方案,具体案例研究
- 从派生类构造函数初始化受保护的数据成员
- 访问另一个类的受保护数据成员