虚函数与它覆盖的函数的返回类型不一致

时间:2014-07-21 18:10:00

标签: c++ compiler-errors covariance

我有以下代码:

class ExtensionFactory {
public:
    explicit ExtensionFactory( const std::string& i_Name
                              , const std::string& i_Version
                              , const std::string& i_Author
                              , const std::string& i_Type
                              , const std::vector<std::string>& i_Keys );

    virtual ~ExtensionFactory();

};

class IOExtensionFactory : public ExtensionFactory {
public:
    explicit IOExtensionFactory( const std::string& i_Name
                                , const std::string& i_Version
                                , const std::string& i_Author
                                , const std::string& i_Type
                                , const std::vector<std::string>& i_Keys );

    virtual ~IOExtensionFactory();

    virtual IOExtension* New( const boost::property_tree::ptree::value_type& i_ConfigNode
                            , boost::mutex& i_LogMutex
                            , streamlog::severity_log& i_Log
                            , const boost::shared_ptr<boost::mutex>& i_QueueMutex
                            , const boost::shared_ptr<ExtensionQueue>& i_Queue ) = 0;

};

class FileReaderFactory : public IOExtensionFactory {
    FileReaderFactory();
public:
    explicit FileReaderFactory( const std::string& i_Name
                                   , const std::string& i_Version
                                   , const std::string& i_Author
                                   , const std::string& i_Type
                                   , const std::vector<std::string>& i_Keys );

    virtual ~FileReaderFactory(); 

    virtual IOExtension* New( const boost::property_tree::ptree::value_type& i_Config
                           , boost::mutex& i_LogMutex
                           , streamlog::severity_log& i_Log
                           , const boost::shared_ptr<boost::mutex>& i_QueueMutex
                           , const boost::shared_ptr<ExtensionQueue>& i_Queue );

};

当我编译它时,我得到了FileReaderFactory :: New的协变错误。我不知道为什么因为FileReaderFactory和IOExtensionFactory都具有相同的返回类型。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

(在投票之前,这不回答他的问题,肯定会有。答案是他的代码没有他认为的问题。)

以下简短的自包含示例不会显示您收到的错误消息。你必须提供更多细节。

class IOExtension {
};

class ExtensionFactory {
public:
    virtual ~ExtensionFactory();
};

class IOExtensionFactory : public ExtensionFactory {
public:
    virtual IOExtension* New() = 0;
};

class FileReaderFactory : public IOExtensionFactory {
    FileReaderFactory();
public:
    virtual ~FileReaderFactory();

    virtual IOExtension* New();
};

int main() {
    return 0;
}