矢量显示错误
mistake in vector showing
有两个简单的类。我想与矢量显示结果,但数字不显示。另一方面,当我尝试没有向量的结果,结果将显示。你能帮我吗?谢谢你。
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
using namespace std;
template<typename T>
class One
{
protected:
T word;
T word2;
public:
One() {word = "0"; word2 = "0";}
One(T w, T w2) {word = w; word2 = w2;}
virtual const void Show() {cout << word << endl; cout << word2 << endl;}
};
template<typename T>
class Two : public One<T>
{
private:
int number;
public:
Two() {number = 0;}
Two(T w, T w2, int n) : One(w,w2) {number = n;}
virtual const void Show () {cout << word << endl; cout << word2 << endl; cout << number << endl; }
};
int main ()
{
One<string> *idk;
Two<string> *something = new Two<string>("asd","aa",1);
idk = something;
idk->Show(); // OK - asd, aa, 1
vector<One<string>> arr;
arr.push_back(*idk);
arr.at(0).Show(); // WRONG - asd,aa
return 0;
}
您正在存储One<string>
实例,而不是指向它们的One<string>*
。
由于对象完全存储在向量单元中,因此没有多态性,因为对象遭受切片:在您放置在向量中的实例中继承One
的任何附加特征都将被丢弃。
尝试使用vector<One<string>*>
以便存储指针并且问题不会发生。请记住,为了管理内存,在使用STL集合时使用智能指针是一个明智的选择。
您的矢量存储One<string>
对象。当您执行push_back(*idk)
时,将通过复制*idk
的构造函数创建一个新的One<string>
对象。
如果你想保持虚行为,你应该使用指针向量:vector<One<string>*> arr;
和arr.push_back(idk);
。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 程序崩溃并显示"std::out_of_range"错误
- 显示错误输出的简单数组排序程序
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- Clion显示错误,但可以使用Cmake成功构建代码
- 代码使用向量成功运行,但使用数组显示错误
- 在链表中的第 n 位插入显示分割错误
- 为什么当 vector 为空时会显示运行时错误?
- 查找显示链表时出现的错误
- SDL 映像:无法打开映像,仅显示错误消息
- 为什么将指针重新分配给 1D 数组的 char 时显示错误,但 2D 数组工作正常?
- 与clang++一起使用的VS代码在构建良好的C++文件中显示错误
- 修复转换 IP 时inet_ntoa中的 Endianess 错误显示反转值
- g 编译选项,带有-STD = C 14编译错误显示Werror = C 11 -Compat
- 加载图像约500次后,此错误显示在Visual Studio Qimage:不记忆,返回空图像
- 为什么非unicode应用程序系统语言环境使Unicode字体具有错误显示的符号字符
- 当整数变量用于在 c++ 中声明数组大小时,错误显示为"Expression must have a const value"
- 在Qt错误显示:"Fault Module Name: Qt5Cored.dll"在win 7和调试时:"segmentation fault"在CentOS Linux和Win 7中