2011-12-01 2 views
2

아래 그림을 기반으로 코드를 작성했습니다. 컴파일러는 이러한 오류를 보여여러 클래스 상속?

#include<iostream> 
#include<string> 
using namespace std; 

class person 
{ 
private: 
    int code; 
    string name; 
public: 
    void setCode(int c) { code=c; } 
    int getCode()   { return code; } 
    void setName(string s) { name=s; } 
    string getName()  { return name; } 
}; 

class account : public person 
{ 
private: 
    double pay; 
public: 
    void setPay(double p) { pay=p; } 
    double getPay()   { return pay; } 
}; 

class admin : public person 
{ 
private: 
    string experience; 
public: 
    void setExper(string e) { experience=e; } 
    string getExper()  { return experience; } 
}; 

class master : public account, public admin 
{ 
}; 

int main() 
{ 
    master mastObj;// create master object. 
    mastObj.setName("John"); 
    system("pause");//to pause console screen, remove it if u r in linux 
    return 0; 
} 

:

Error 1 error C2385: ambiguous access of 'setName' 
Error 2 error C3861: 'setName': identifier not found  
Error 3 IntelliSense: "master::setName" is ambiguous 
+0

첫째, 귀하의 질문에 제목은 문장의 끝 부분에 관계없이 물음표, 실제 문제가 아닙니다. 둘째, 문제를 실제로 설명하고, 코드 조각을 붙여 넣는 대신에 지금까지 해본 것을 설명하고 다른 사람들이 문제를 해결하도록하는 것이 좋습니다. –

+0

코드 서식이 엉망이었습니다. 인간을위한 코드도 있습니다 :) 특히 _us_가 그것을 읽고 싶어하기 때문에. – sehe

+0

가능한 복제 [가상 상속 혼란] (0120)을 참조하십시오. – Nawaz

답변

3

당신은 가상 상속이 필요합니다

class account: public virtual person{ 
.... 
} 

class admin: public virtual person{ 
... 
} 

PS 그리고 당신의 지불을, 코드 필드는 초기화가 부족! 이것은 (수백만 :) 달러의 청소기를 지불 등) 오류를 당황으로 이어질 수 : 모든

#include<iostream> 
#include<string> 
using namespace std; 

class person 
{ 
    // ... 
    person() : code(0), name("anonymous") {} 

}; 

class account : public virtual person 
{ 
    // ... 
    account() : pay(0) {} 
}; 

class admin : public virtual person 
{ 
    // ... 
    admin() : experience("unknown") {} 
}; 
7

그것은 당신이 다중 상속을 사용하면 C++에서 Diamond Problem의 고전적인 예이다 enter image description here

이 내가 쓴 코드입니다. 이다 Virtual inheritance

, 당신이 수행해야합니다 :

솔루션은이 사이트에

class account : public virtual person 
{     //^^^^^^^note this 
    //code 
}; 

class admin : public virtual person 
{     //^^^^^^^note this 
    //code 
}; 

나는 단지 발견 정말 좋은 게시물, 그래서 여기 답변을 리디렉션합니다 :

  • Virtual inheritance in C++
  • 는이 주제에 가까이 투표해야한다.