具有用户定义类型向量的虚函数
virtual function with user-defined-type vector
我想定义一个具有结构变量向量的抽象基类,以及一个由派生类实现的虚函数:
class TestFather {
private:
struct myStruct
{
// struct definition
};
vector<myStruct> myStructVect;
public:
virtual vector<myStruct> get_myStructVect() = 0;
};
但是当我写派生类时:
#include "TestFather.h"
class TestSon : public TestFather{
private:
struct myStruct
{
// struct definition
};
vector<myStruct> myStructVect;
public:
vector<myStruct> get_myStructVect();
};
我得到这个错误:
invalid covariant return type for ‘virtual std::vector<ProvaSon::myStruct, std::allocator<ProvaSon::myStruct> > ProvaSon::get_myStructVect()’
我是做错了什么事,还是我想做一些被语言禁止的事情?
两种myStruct
类型是完全不相关的。这意味着您正在尝试覆盖TestFather::get_myStructVect()
并让它返回一个完全不同的类型。这是不允许的
您不必在TestSon
中重新定义结构,并且您也不能这样做。fatherptr->get_myStructVect
的调用者静态地返回vector<TestFather::myStruct>
,因此编译器禁止您像这样重写基类函数,因为动态返回的对象可能与vector<TestFather::myStruct>
不兼容(谁知道您在TestSon::myStruct
中放入了什么,以及vector
在行为上与基类向量有何不同?)。
对于允许的差异,c++只允许派生类的返回类型是基类返回类型的派生类,并且只有当返回类型是指针或引用时才允许。
禁止。因为你已经在派生类中重新定义了myStruct, vector
只能将虚函数的返回类型更改为继承自基类中声明的返回类型。但vector
它说 vector<myStruct>
,但由于您在子类中更改了myStruct
,它实际上是两个不同的类型,因此两个函数中的每一个都认为它返回不同的类型。这只允许协变类型,其中类型与包含函数的类的实际类型相关。
请注意,您可能不应该在这里按值返回类属性向量。
我不知道你真正想要做什么,但是如果嵌套结构是两个不同的东西,那么它们就不应该有相同的名称(如果它们是相同的,就不要重新定义它)。我的第一反应是,也许亲子关系不适合在这里。你考虑过其他选择吗?如果你真的需要在子类中返回一个不同的类型,而父类不知道,那么你就不能使用虚拟接口来做这件事。你应该给函数起不同的名字,这样你就知道返回类型应该是什么了。
如果你的目标更详细,你的回答会更好。
复制的私有结构在您的示例中有点奇怪。下面的代码编译得很好,例如:
类TestFather {
protected:
struct myStruct
{
// struct definition
};
vector<myStruct> myStructVect;
public:
virtual vector<myStruct> get_myStructVect() = 0;
};
class TestSon : public TestFather{
public:
vector<myStruct> get_myStructVect();
};
int main(int argc, char**argv)
{
TestSon testSon;
}
注意用protected替换了private,允许派生类访问父结构定义和myStructVect存储。
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用向量的template_back函数
- 如何通过派生类函数更改基类中的向量
- 变量没有改变?通过向量的函数调用
- 一对向量构造函数:初始值设定项列表与显式构造
- 在c++中使用向量时,如何调用构造函数和析构函数
- std::sort()函数无法对向量的一部分进行排序
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- C++中函数的向量返回类型引发错误
- 添加存储在向量中的大整数的函数出现问题
- 如何在 c++ 中定义接受不同参数类型的函数向量?
- 具有 lambda 函数的函数向量
- 你能用参数制作函数向量吗?
- 在C++中使用成员函数向量时,有没有办法实现协变返回类型
- 在编写 lambda 函数向量时出现隔离错误
- 如何在 boost.process 间共享内存中使用复杂结构"push_back"函数向量
- 是否将std矢量重新分配到默认的构造函数向量是擦除的好方法
- 运行提升for_each中的成员函数向量
- 创建和回推函数向量
- C++,指向函数向量的指针的STL映射