Ich portiere älteren Code aus MS Visual Studio nach Clang und stoße auf ein Problem mit geschützten Datenelementen. Kurz gesagt, mein Problem ist das:clang erkennt keine geschützten Datenelemente
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(); }
}
Dies kompiliert gut unter MSVC++, aber nicht unter Clang. Clang beschwert sich:
Verwendung von undeclared Identifikator sb_.
Nach Meyers Wirksam C++ Ich benutze nicht geschützt viel und kann den Code neu schreiben, nicht zu verwenden, aber ich wundere mich immer noch, warum Clang hier beschwert, wie die abgeleitete Klasse in der Lage sein sollte, die geschützten Mitglieder der Base-Klasse zu sehen . Was vermisse ich?
Können Sie bitte die gesamte Fehlermeldung, oder zumindest einen Teil davon abgeben? Ich vermute, dass das eigentliche Problem ist, dass "sb_" keine Funktion namens "Nummer" hat. – Rakete1111
Shoud nicht 'sb _-> Nummer();'? – Amadeus
MCVE ...........? –