虚函数与它覆盖的函数的返回类型不协变
virtual function is not covariant with the return type of the function it overrides
我有以下代码:
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都有相同的返回类型。
任何帮助都会很感激。
(在投票之前,这并没有回答他的问题,它当然回答了。)答案是他的代码不存在他认为存在的问题。
下面这个简短的、自包含的示例不会显示您得到的错误消息。你得提供更多的细节。
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;
}
相关文章:
- 检查函数返回类型是否与STL容器类型值相同
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 在 c++ 中将函数返回类型指定为模板参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 如何避免模板函数返回类型重复?
- 从类型bankAccount的返回值到函数返回类型int没有可行的转换
- 为什么在某些情况下从函数返回类型中删除 cv 限定符?
- 模板类内模板类的函数返回类型
- 为什么函数返回类型中不允许参数推导?
- 函数返回类型之前的"define"
- C++推断要隐式调用的模板函数返回类型
- 具有不同模板参数的函数返回类型
- 当函数返回类型为父类时,如何返回子类的对象?
- C++:在原型中声明"auto"函数返回类型仍然会导致在扣除错误之前使用"auto&quo
- C++14 'auto'能够获取函数返回类型,我们还需要 std::result_of<> 吗?
- 函数返回类型中的模板类型推断
- 嵌套模板类返回类型在 C++ 中的头文件中函数返回类型的语法
- C++重写 void 函数返回类型会导致生成失败
- 从函数内部推断函数返回类型
- C++嵌套类函数返回类型和命名空间