编译来自模板化基类的派生类时,出现“成员不明确”错误

时间:2019-06-29 00:28:16

标签: c++ c++11

下面是我的代码的简化版本。基本上,我试图创建一些数据提供程序类,以及一些从已注册的数据提供程序中调用该方法的数据查询器类。


#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)

进行编译

0 个答案:

没有答案