2014-11-13 11 views
-3

다음 코드에서 오류를 찾으라는 메시지가 나타납니다. 내가 지금까지 그들 중 세 가지를 발견했다 (5) 오류가 분명히있다, 여기에 코드코드 스 니펫에서 오류 찾기

#include <iostream> 
class Base{ 
public: 
    Base(int data) : _data(data){} 
    virtual void printData(){ 
     std::cout << "Base " << _data << std::endl; 
    } 

private: 
    int _data; 
}; 

class Derived : public Base{ 
public: 
    Derived(derivdata) : Base(derivdata){} 
    void printData(){ 
     std::cout << "Derived " << _data << std::endl; 
    } 
} 

int main(){ 
    Derived *var = new Derived(5); 
    var->printData(); 
    Base* basevar = static_cast<Base>(*var); 
    basevar->printData(); 
} 
  1. 클래스 Derived은 세미콜론으로 끝나지 않는에게 있습니다.
  2. Derived
  3. 은 생성자의 인수는 입력
  4. Base의 데이터 멤버는 pivate 그래서 시도되고 Derived으로 액세스 될 수없는 선언되지 않는다.

저는 다른 사람들을 찾기 위해 고심하고 있습니다. 나는 주조에 대해 main()과 관련 있다고 생각하지만 캐스팅에 대해서는 아직 많이 알지 못합니다. 나는 올바른 방향으로 어떤 도움을 주셔서 감사하겠습니다. 컴파일러는 항상 당신을 위해 구문 오류를 발견 할 것이다 - 감사

+4

그것을 컴파일 시도해야한다. 그리고 네,'static_cast' 라인으로 문제가 발생했습니다 (또는 두 가지 방법으로 계산합니다). – Barry

+0

많은 경고가 가능한 코드를 컴파일하여 시작하십시오. –

+1

기본 클래스에 가상 소멸자가 없습니다. 'var'을 해제하는'delete'도 없습니다. –

답변

0
Base* basevar = static_cast<Base>(*var); 

Base* basevar = static_cast<Base*>(var); 
+0

감사합니다.이게 내 문제를 해결하고 큰 도움이되었습니다. 누구든지 내 질문에 투표가 중단 된 이유를 알고 있습니까? 무고한 질문입니다. – daw531

관련 문제