我有以下代码:
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都具有相同的返回类型。
任何帮助将不胜感激。
答案 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;
}