2012-05-15 3 views
1

누군가가 이미 요청했다,하지만 난 여기에 이상한 행동을 보면 확실하지 : 나는 두 개의 클래스, 하나 개의 기본과 하나의 가상 메서드 display() 도출을 선언 한스마트 포인터 (auto_ptr은) 행동

합니다.

class A { 
public: 
    virtual void display() { 
     cout << "base class" << endl; 
    } 
}; 

class B:public A { 
public: 
    void display() { 
     cout << "derived class" << endl; 
    } 
}; 

지금, main()에, 나는

int main() { 
    auto_ptr<A> *a = (auto_ptr<A>*)new B(); 
    a->display(); 
} 

나는 컴파일에 오류가 발생, Aauto_ptr을 선언하고 그것을 B의 새로운 인스턴스를 할당하려고하면 :

"'class std::auto_ptr<A>'에는 'display'라는 회원이 없습니다."

내가 잘못하고 있니? 누군가가 그 행동을 설명 할 수 있습니까?

+2

서식을 수정했습니다. 질문을 쓸 때 미리보기를 사용하여 형식이 올바른지 확인할 수 있습니다. 귀하의 경우에는 인용 된 텍스트를 소스 코드와 혼합합니다. –

+0

@KonradRudolph 감사합니다. 나는 다음에 이것을 돌볼 것이다. 나는 StackOverflow와 C++ 프로그래밍에 오랜 시간이 지난 뒤로 돌아 왔고 따라서이 오류들 :). – Shree

답변

3

auto_ptr에 대한 포인터를 만듭니다. auto_ptr은 포인터처럼 작동하는 개체이므로 *을 추가 할 필요가 없습니다.

당신은 아마 원하는 :

auto_ptr<A> a(new B()); 
a->display(); 

내가 부스트의 스마트 포인터 (scoped_ptrshared_ptr) 또는 C++ (11)의 std::unique_ptrstd::shared_ptr 중 하나를 recomment해야하지만.

2
auto_ptr<A> *a = (auto_ptr<A>*)new B(); 

매우 이상한 일을합니다. 객체를 만들려하고 관리하는 스마트 포인터를 사용하는 경우, 객체에 대한 포인터와 스마트 포인터를 초기화 :

auto_ptr<A> a(new B); 
a->display(); 
2

auto_ptr<A> *a 쓰기습니까? 그것은 그렇게해서는 안됩니다. 따라서이 오류가 발생합니다. auto_ptr<A> a(new B);이어야합니다. 어떻게 작동하는지 here을 읽으십시오.