C++ 如何使用泛型返回类型重写虚拟函数

C++ 如何使用泛型返回类型重写虚拟函数,c++,C++,我有一个来自模板类的派生类。我正在重载派生类中的所有虚拟函数,但我不知道返回类型使用什么 基类: #ifndef BASEDAO_H #define BASEDAO_H template <typename T> class BaseDAO { protected: virtual void addObject(T)=0; virtual void removeObject(T)=0; virtual T getObject(); }; #endif //

我有一个来自模板类的派生类。我正在重载派生类中的所有虚拟函数,但我不知道返回类型使用什么

基类:

#ifndef BASEDAO_H
#define BASEDAO_H

template <typename T>
class BaseDAO
{
protected:
    virtual void addObject(T)=0;
    virtual void removeObject(T)=0;
    virtual T getObject();
};

#endif // BASEDAO_H
\ifndef BASEDAO\u H
#定义BASEDAO_H
模板
类BaseDAO
{
受保护的:
虚空addObject(T)=0;
虚空移除对象(T)=0;
虚拟T getObject();
};
#endif//BASEDAO_H
派生类:

#ifndef MEMBERDAO_H
#define MEMBERDAO_H
#include "basedao.h"
#include "member.h"


class MemberDAO : public BaseDAO<Member>
{
public:
    void addObject(Member);
    void removeObject(Member);
    Member getObject();
};

#endif // MEMBERDAO_H
\ifndef MEMBERDAO\u H
#定义成员
#包括“basedao.h”
#包括“member.h”
类MemberDAO:publicbasedao
{
公众:
无效对象(成员);
无效移除对象(成员);
成员getObject();
};
#endif//MEMBERDAO_H

所有其他方法都有效。当我使用Member作为返回类型时,会发生错误。提前感谢。

我尝试的任何编译器都没有出现这个问题,这可能是由于转录错误造成的

有一种方法可以帮助你避免这种设计中的一些明显的陷阱,那就是在基本定义中使用特征:

#include <iostream>
#include <string>

template<typename T>
struct Base
{
#if HAVE_CPP11
    using value_type = T; // C++11
#else
    typedef T value_type;
#endif

    virtual value_type get() = 0;
};

struct Derived : public Base<std::string>
{
    value_type get() override { return "hello"; }
};

int main()
{
    Derived d;
    std::cout << d.get() << "\n";
}
#包括
#包括
模板
结构基
{
#如果你有
使用value_type=T;//C++11
#否则
类型定义T值_类型;
#恩迪夫
虚拟值_type get()=0;
};
结构派生:公共基
{
value_type get()重写{返回“hello”;}
};
int main()
{
导出d;

std::您是否缺少
getObject()
中的返回类型。这是将代码转录到SO中的错误吗?代码中是否存在该错误?
virtual T getObject();
不是纯抽象方法(无
=0
),因此需要定义。谢谢……它通过在基类中向getObject()添加一个=0来工作