class messageA {
};
class messageB {
};
template<class T>
class queue {
public:
virtual ~queue() {}
void submit(T& x) {}
};
class A : public queue<messageA>, public queue<messageB>
{
};
int main()
{
A aa;
aa.submit(messageA());
aa.submit(messageB());
}
클래스 A는 messageA와 messageB 객체를 받아들이는 2 개의 오버로드 된 submit 함수를 포함하기 때문에 위의 코드는 괜찮을 것이라고 생각합니다.다중 상속 템플릿 클래스
내가 모호한 존재 이유를 알고있다 :
그러나, 컴파일러는 나에게 다음과 같은 오류 준다? 첫 번째 제출 요청에 대해 messageA 버전을 호출하고 싶습니다. 두 번째 제출 통화의 경우 messageB 버전을 호출하고 싶습니까?
------ Build started: Project: main, Configuration: Release Win32 ------
Compiling...
main.cpp
.\main.cpp(21) : error C2385: ambiguous access of 'submit'
could be the 'submit' in base 'queue<messageA>'
or could be the 'submit' in base 'queue<messageB>'
.\main.cpp(21) : error C3861: 'submit': identifier not found
.\main.cpp(22) : error C2385: ambiguous access of 'submit'
could be the 'submit' in base 'queue<messageA>'
or could be the 'submit' in base 'queue<messageB>'
.\main.cpp(22) : error C2664: 'queue<T>::submit' : cannot convert parameter 1 from 'messageB' to 'messageA &'
with
[
T=messageA
]
.\main.cpp(22) : error C3861: 'submit': identifier not found
'messageA'에서'messageA &'로 암시 적으로 변환하는 것은 표준 C++가 아닙니다. 비 const 참조는 lvalue (http://msdn.microsoft.com/en-us/library/186yxbac(VS.80).aspx)에만 바인딩 할 수 있습니다. 'submit()'함수는'T &'대신'const T &'를 받아 들여야합니다. –