C++ C-cast中的指针和继承问题?
我正在从事一个opengl项目,我的一些类遇到了问题: 主要有三类:C++ C-cast中的指针和继承问题?,c++,inheritance,casting,C++,Inheritance,Casting,我正在从事一个opengl项目,我的一些类遇到了问题: 主要有三类: 初始化Opengl后,我使用相同的函数初始化场景: void GLWidget::initializeGL(){ [OpenGL initialization] _scene=new scene; point* s1=new point(0.0,0.0,3.0,1.0); _scene->add_object(s1); } 错误出现在scene::add_object函数中。我不明
初始化Opengl后,我使用相同的函数初始化场景:
void GLWidget::initializeGL(){
[OpenGL initialization]
_scene=new scene;
point* s1=new point(0.0,0.0,3.0,1.0);
_scene->add_object(s1);
}
错误出现在scene::add_object函数中。我不明白为什么它不工作,因为*p_元素和_元素都是指针。我认为这是演员阵容的问题,但我不知道如何解决。我尝试了动态投射:错误仍然存在
谢谢你的帮助
Kamouth
对象**p\u元素=元素代码>将p_元素
设置为未初始化的内存。所以p_元素-元素=nb_元素
,p_元素++代码>和*p_元素=_元素代码>调用未定义的行为。我不建议您初始化内存,只建议您使用std::vector
和智能指针
双指针表示你来自C背景,但是如果你想做C++开发,你必须学习C++习语。在C++中不要坚持写C代码。< /P>为什么这被标记为C?C和C++是两种完全不同的语言,你是否为<代码>元素< <代码> > RICHARJ.R.Ssiii分配了内存。我假定C指的是您可以在
add\u object
中看到的代码(通常是nb\u元素
)。这不是典型的C代码。事实上,你可以看到一个类关键字并不意味着它的'C++'的meNo我没有。。。我很可耻。。非常感谢。您好,我使用了双指针,因为我使用的是需要通过指针调用的虚拟函数(对吗?)。如果构造函数中已分配元素,则肯定不会。这是一个off-by-one错误,因为循环完成后,p\u元素
将指向elements
数组的末尾,假设nb\u元素
设置正确。实际上,考虑到末尾的nb\u元素
,这更像是一个“您没有分配足够的内存”错误。不过,要回显@LuchianGrigorie,请尝试改用std::vector
。@Kamouth否。您也可以通过智能指针和引用调用虚拟函数。@Luchian Grigore,好的,但我不能使用std::vector,对吗?我不知道什么是智能指针。
class object{
public:
object();
[...]
};
class point : public object{
point();
point(double _x, double _y, double _z,double _r);
[...]
}
void GLWidget::initializeGL(){
[OpenGL initialization]
_scene=new scene;
point* s1=new point(0.0,0.0,3.0,1.0);
_scene->add_object(s1);
}