我想做一个父子元素的向量。我只用一个孩子测试了我的代码,这很好。但是当我添加一个孩子(Child2
)时,我看到一个问题。
当我尝试获得值px
预期的输出是:5 7 11,但我得到的值为type
variable(2);父母和孩子的向量C++
Main.cpp的
#include <SFML/Graphics.hpp>
#include "Helper.h"
#include <vector>
#include <iostream>
using namespace sf;
int main() {
std::vector<Parent*> arr1;
arr1.push_back(new Child(3, 4, 5, 6));
arr1.push_back(new Parent(7, 8));
arr1.push_back(new Child2(9, 10, 11, 12));
std::cout << static_cast<Universal*>(arr1.at(0))->dx << std::endl;
std::cout << static_cast<Universal*>(arr1.at(1))->x << std::endl;
std::cout << static_cast<Universal*>(arr1.at(2))->px << std::endl;
return 0;
}
Helper.cpp
#include "Helper.h"
Parent::Parent(int x, int y) {
this->x = x;
this->y = y;
}
Child::Child(int x, int y, int dx, int dy) : Parent(x, y) {
this->dx = dx;
this->dy = dy;
}
Child2::Child2(int x, int y, int px, int py) : Parent(x, y) {
this->px = px;
this->py = py;
}
Universal::Universal(int x, int y) : Parent(x, y) {}
Helper.h
class Parent {
public:
int x, y;
int type = 0;
Parent(int x, int y);
};
class Child : public Parent {
public:
int dx, dy;
int type = 1;
Child(int x, int y, int dx, int dy);
};
class Child2 : public Parent {
public:
int px, py;
int type = 2;
Child2(int x, int y, int px, int py);
};
class Universal : public Parent {
public:
int dx, dy, px, py;
Universal(int x, int y);
};
你有UB和你的'static_cast'。 –
Jarod42
将原始指针存储在'std :: vector'(或任何STL容器)中几乎总是一个坏主意。改为使用'std :: vector>'。 –
ArchbishopOfBanterbury
@ Jarod42,什么是UB? –