下面是我的代码的简化版本。基本上,我试图创建一些数据提供程序类,以及一些从已注册的数据提供程序中调用该方法的数据查询器类。
#include <string>
#include <iostream>
template <typename T>
class Provider
{
public:
virtual ~Provider( ) = default;
virtual T Provide( ) = 0;
};
template <typename T>
class Inquirer
{
public:
Provider<T>* provider;
public:
void Register( Provider<T>& provider ) {
this->provider = &provider;
}
public:
void Inquire( T& data ) const {
data = provider->Provide( );
}
};
class Data1 : public Provider<int>
{
public:
int Provide( ) {
return 42;
}
};
class Data2 : public Provider<std::string>
{
public:
std::string Provide( ) {
return "Hello";
}
};
class Query : public Inquirer<int>, public Inquirer<std::string>
{
public:
void PrintInt( ) {
int data;
Inquire( data );
std::cout << "Data: " << data;
}
public:
void PrintString( ) {
std::string data;
Inquire( data );
std::cout << "Data: " << data;
}
};
int main( void )
{
Data1 data1;
Data2 data2;
Query query;
query.Register( data1 );
query.Register( data2 );
query.PrintInt( );
query.PrintString( );
return 0;
}
在编译时,在查询类中的 query.Register()调用和 Inquire()调用中都出现“ member isambiguous”错误。由于我将非常具体的参数传递给每个方法,因此我不明白为什么会发生此错误...
如何解决此问题,以便调用正确的方法?
P.S。我正在使用 gcc -std = c ++ 11 (gcc版本5.4)
进行编译