>
class A{
    string m_name;
    int m_num;
public:
    A(string name="", int number=0) : m_name(name), m_num(number)
    { cout << "ctorA " << m_name << endl; }
    virtual ~A(){ cout << "dtorA " << m_name << endl; }
    string getName(){ return m_name; }
    void setName(const string name){ m_name = name; }
    int getNumber(){ return m_num; }
};
class B : public A{
    string m_s;
public:
    B(string name="", int number=0, string s="")
        : A(name, number){ m_s = s; }
    string getS(){ return m_s; }
};

auto upB = unique_ptr<B>("B", 2, "B");   //ERROR HERE

error: no matching function for call to 'std::unique_ptr<B>::unique_ptr(const char [2], int, const char [2])'

B 생성자가 보이지 않는 이유를 모르겠습니다. 나에게 괜찮아 보인다. 기본 생성자와 함께 작동합니다 :

auto upB = unique_ptr<B>();

내가 잘못했거나 파생 클래스에 특별한 문제가 있습니까?


  • 답변 # 1

    auto upB = std::make_unique<B>("B", 2, "B");
    
    

    또는

    auto upB = std::unique_ptr<B>(new B("B", 2, "B"));
    
    
    std::unique_ptr<B> 아래  그것은 nullptr 와 같습니다 .

    auto upB = unique_ptr<B>();
    
    

  • 답변 # 2

    I don't understand why it doesn't see the B constructor.

    unique_ptr<B>("B", 2, "B"); 참고   B 를 호출하지 않습니다 의 생성자이지만 std::unique_ptr 의 생성자. 와이즈 비즈  그러한 생성자가 없으면 컴파일이 실패합니다.

    내가 원하는 것 같아

    std::unique_ptr
    
    

    auto upB = unique_ptr<B>(new B("B", 2, "B")); 유형의 포인터 전달   B* 를 건설 ;당신은 또한 unique_ptr<B> 를 사용할 수 있습니다 std::make_unique 의 생성자에게 인수를 전달합니다.   B 유형의 객체를 생성   B 에 싸서 .

    std::unique_ptr
    
    
    그리고 auto upB = make_unique<B>("B", 2, "B"); 에 대해 , 당신은 auto upB = unique_ptr<B>(); 를 건설하고 있습니다   std::unique_ptr 를 통해 아무것도 소유하지 않는 의 기본 생성자입니다.

    std::unique_ptr

관련 자료

  • 이전 r - 동일한 범주 내에서 모든 값을 내 데이터 프레임에서 동일하게 만드는 방법은 무엇입니까?
  • 다음 yaml - Ansible 모듈 옵션의 일부로 Jinja2 dict 사용