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 будет содержать 2 перегруженные функции отправки, которые будут принимать объекты messageA и messageB.Шаблон множественного наследования Класс
Однако компилятор дает мне следующее сообщение об ошибке:
Могу ли я узнать, почему существует неоднозначное? Разве не совсем очевидно, что для первого запроса на передачу я хочу позвонить в версию 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()' должна принимать 'const T &', а не 'T &'. –