Diamond Problem

다이아몬드 상속은 같은 기반 클래스가 두 경로로 들어와 이름이 모호해진다

Copier가 Printer와 Scanner를 동시에 상속하면, 두 부모가 각각 Device를 품고 있어 Copier 안에 Device 부분이 두 개 생길 수 있습니다.

non-virtual

Device가 두 번 복사된다

Printer
Device copy #1 포함
Scanner
Device copy #2 포함
Printer::Device::id Scanner::Device::id
Copier
c.id가 어느 Device의 id인지 모호하다
해결 방향

공유 기반은 하나만 남겨야 한다

Device
공유되어야 할 상태 id
virtual public virtual public
Printer
Device를 공유 경로로 참조
Scanner
같은 Device를 공유 경로로 참조
오류의 본질

`c.id`가 실패하는 이유는 id가 없어서가 아니라, 같은 이름의 id가 두 경로에 존재해서 컴파일러가 하나를 고를 수 없기 때문입니다.