親要素と子要素のベクトルを作りたいと思います。私はただ1人の子供と私のコードをテストし、それはうまく動作します。しかし、もう1人の子供(Child2
)を追加すると、問題が発生します。
私がpx
の値を取得しようとすると、予想される出力は5 7 11ですが、値はtype
(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);
};
あなたの 'static_cast'にはUBがあります。 –
Jarod42
'std :: vector'(またはその問題のSTLコンテナ)に生ポインタを格納することは、ほとんど常に悪い考えです。代わりに 'std :: vector>'を使用してください。 –
ArchbishopOfBanterbury
@ Jarod42、UBとは何ですか? –