我有两个类,在第一个类“ DrawGraphics”中,我试图从已预先声明为“ MainComponent”的类中访问成员变量。但是,这导致读取访问冲突。
这是错误消息:
teacher = TeacherSalary.objects.get(id=id).name
我正在使用JUCE框架,异常发生在这里:
Unhandled exception thrown: read access violation.
std::_Unique_ptr_base<juce::Slider::Pimpl,std::default_delete<juce::Slider::Pimpl> >::_Myptr(...) returned 0xFFFFFFFFFFFFFFFF.
您在下面看到的内容仅占实际代码的20%,但我将尝试仅包含每个文件的相关部分,以免使您陷入可疑的编写代码中。
DrawGraphics.h
_NODISCARD pointer operator->() const _NOEXCEPT
{ // return pointer to class object
return (this->_Myptr()); // <-- this is the exception breakpoint
}
DrawGraphics.cpp
class MainComponent;
class DrawGraphics : public Component
{
public :
void clock();
private:
MainComponent* mainComponent;
};
MainComponent.h
#include "DrawGraphics.h"
#include "MainComponent.h"
void DrawGraphics::clock()
{
double sliderOutput = mainComponent->ampSlider.getValue();
// THIS ^ CAUSES THE ERROR
DBG("Slider output is : " << sliderOutput);
}
MainComponent.cpp
class MainComponent : public Component,
public Slider::Listener
{
public:
Slider ampSlider;
void sliderValueChanged(Slider* slider) override;
private:
DrawGraphics drawGraphics;
};
我希望能够简单地访问ampSlider产生的数据流。如果我未能包含与问题实际相关的部分代码,请提前道歉。
...
编辑:
好的,所以我的问题是我没有初始化mainComponent。我通过改变来做到这一点
在DrawGraphics.h中从void MainComponent::sliderDragStarted(Slider* slider)
{
if (slider == &Slider)
{
drawGraphics.clock();
}
}
到MainComponent* mainComponent;
然后在DrawGraphics.cpp中,通过在DrawGraphics :: clock()的开头简单地添加MainComponent* mainComponent{};
来创建mainComponent对象。
似乎在尝试获取ampSlider的值时,我指的是一个空的单元化对象。
感谢所有帮助。
答案 0 :(得分:1)
MainComponent似乎未初始化,请更改为:
MainComponent* mainComponent{};
然后,在使用前,请检查是否为空:
if (!mainComponent) {
return;
}
//do stuff with mainComponent
应该解决问题。