2017-02-21 15 views
-2

следующий код не компилируется:частная ошибка базового класса при использовании enable_shared_from_this

class A : B, std::enable_shared_from_this<A> 
{ 
public: 
    A(); 
    virtual ~A(); 
public: 
    void initStr(std::string str=""){m_STR = str;}; 
private: 
    std::string m_STR; 
}; 

Выход ошибки:

Не можете бросить 'A' до частного базового класса 'Const enable_shared_from_this'

версия Xcode - это 8.2.1 Apple LLVM версия 8.0.0 (clang-800.0.42.1)

Кто может мне предложить? благодаря!

+4

сделать 'public'? –

+0

Да, это сработало. – xuejieNian

ответ

1

Изменить class для struct. struct делает наследование общественности по умолчанию:

struct A : B, std::enable_shared_from_this<A> { 
    A(); 
    virtual ~A(); 

    void initStr(std::string str = {}) { m_STR = str; } 

private: 
    std::string m_STR; 
}; 

В качестве альтернативы, вы можете также указать класс для расширения публично:

class A : public B, public std::enable_shared_from_this<A> 
{ 
public: 
    A(); 
    virtual ~A(); 
public: 
    void initStr(std::string str=""){m_STR = str;}; 
private: 
    std::string m_STR; 
}; 
+0

Получите это, спасибо! – xuejieNian

 Смежные вопросы

  • Нет связанных вопросов^_^