这是错误:
DummyService.hpp:35:错误:'virtual std::vector < ResourceBean*, std::allocator < ResourceBean*> >& DummyService::list(const std::string&)' 的协变返回类型无效
class Bean {
public:
typedef std::string Path;
virtual ~Bean() {};
virtual const Path& getPath() = 0;
virtual const std::string& getName() = 0;
protected:
Bean();
};
class ResourceBean: public Bean {
public:
ResourceBean(const Path& path, const std::string& contents) :
_path(path), _contents(contents) {
}
virtual ~ResourceBean() { }
virtual const Path& getPath();
virtual void setPath(const Path& path);
virtual const std::string& getName();
virtual void setName(const std::string& name);
private:
Path _path;
std::string _name;
};
上述Bean
类是数据表示,它们被两个不同的层使用。一层使用Bean
接口,只是为了访问数据的getter。由ResourceBean
数据访问对象 (DAO) 类访问,这些类从数据库中获取数据(例如),并填写ResourceBean
.
DAO 的一项职责是列出给定路径的资源:
class Service {
protected:
/*
* Service object must not be instantiated (derived classes must be instantiated instead). Service is an interface for the generic Service.
*/
Service();
public:
virtual std::vector<Bean*>& list(const Bean::Path& path) = 0;
virtual ~Service();
};
class DummyService: public Service {
public:
DummyService();
~DummyService();
virtual std::vector<ResourceBean*>& list(const ResourceBean::Path& path);
};
我认为这个问题与std::vector<ResourceBean*>
编译器不理解Bean
实际上是ResourceBean
.
有什么建议么?我已经阅读了一些类似的主题,但有些解决方案在我的情况下不起作用。请指出我是否遗漏了什么。先感谢您。