2016-09-03 2 views
2
//Base.h 
Class Base { 
    //... 
public: 
    virtual std::ostream& display(std::ostream& os) const =0; 
} 

//Derived1.h 
Class Derived1 : Base { 
    //... 
public: 
    std::ostream& display(std::ostream&) const;//defined in Derived1.cpp 
} 
//Derived2.h 
Class Derived2 : Derived1{ 
    //... 
public: 
    void display(std::ostream&) const;//error here!!!!!!!!!!!!!!!!!!!! 
} 

void 표시 (std :: ostream &) const를 사용해야합니다. 그것은 내 연구실의 지시에 있고 그것을 바꿀 수 없기 때문입니다. 간단하고 이해할 수있는 derived2의 표시 함수에서 Derived1의 표시 함수를 호출해야합니다. 그래서이동일한 이름이지만 다른 반환 유형의 파생 클래스에서 새 함수 만들기

void Derived2::display(std::ostream& os) const{ 
    Derived1::display(os); 
} 

처럼이 Derived2의 오류는이

Derived2 A; 
A.display(std::cout); 

같은 주에 호출됩니다 "반환 유형은 동일하지 않으며 반환 형식과 공변"표준 : : ostream에 & "의 재정의 된 가상 함수 "

함수의 서명 (이 경우 반환 유형)이 재정의되는 함수와 일치해야하기 때문에 읽은 바 있지만 제 연구실에서 새 함수를 작성하려고합니다. ,하지만 같은 이름으로? 왜냐하면 나는 Derived2에서 display()의 Derived1에서 display()를 호출해야하기 때문입니다. 이견있는 사람?

오, 내가 뭘 하려는지 display() 오버 라이딩, 오른쪽 무시하지 않는 것으로 간주됩니다?

답변

3

반환 유형이 이 아니기 때문에 공역입니다.

"실험실"요청을 놓친 것 같습니다. 또한이 읽기 : 다른 사람이 재현을 위해, ... 그런데에 StackOverflow에

  1. Override a member function with different return type
  2. C++ virtual function return type

오신 것을 환영합니다 최소한의 예를 구성하는 미래의 질문 있는지 확인하여 문제를 일으키고, 그들을 도와 당신을 도우십시오! 여기서,이 경우에 최소한의 일 예이다 :

main.cpp:18:10: error: virtual function 'display' has a different return type 
     ('void') than the function it overrides (which has return type 
     'std::ostream &' (aka 'basic_ostream<char> &')) 
    void display(std::ostream&) const 
    ~~~~^
main.cpp:10:19: note: overridden virtual function is here 
    std::ostream& display(std::ostream&) const 
    ~~~~~~~~~~~~~^
이 오류를 생성 할
#include <iostream> 

class Base { 
public: 
    virtual std::ostream& display(std::ostream& os) const =0; 
}; 

class Derived1 : Base { 
public: 
    std::ostream& display(std::ostream&) const 
    { 
     std::cout << "in Derived1.display" << std::endl; 
    } 
}; 

class Derived2 : Derived1 { 
public: 
    void display(std::ostream&) const 
    { 
     std::cout << "in Derived2.display" << std::endl; 
    } 
}; 

int main() 
{ 
    Derived2 A; 
    A.display(std::cout); 
    return 0; 
} 

관련 문제