C++ 尝试在鼠标事件中将向量的每个元素添加到参数窗口

C++ 尝试在鼠标事件中将向量的每个元素添加到参数窗口,c++,cinder,C++,Cinder,我有一个名字向量。每次用户进行鼠标交互时,我都希望向向量中添加一个元素,并使用用户名。使用cinder框架参数作为GUI。代码如下: #include "cinder/app/App.h" #include "cinder/app/RendererGl.h" #include "cinder/gl/gl.h" #include "cinder/params/Params.h" using namespace ci; using namespace ci::app; using namespac

我有一个名字向量。每次用户进行鼠标交互时,我都希望向向量中添加一个元素,并使用用户名。使用cinder框架参数作为GUI。代码如下:

#include "cinder/app/App.h"
#include "cinder/app/RendererGl.h"
#include "cinder/gl/gl.h"
#include "cinder/params/Params.h"

using namespace ci;
using namespace ci::app;
using namespace std;

class TestParamsApp : public App {
  public:
    void setup() override;
    void mouseUp( MouseEvent event ) override;
    void draw() override;

    params::InterfaceGlRef mParams;
    vector<std::string> names;
    int nameIdx = 0;
};

void TestParamsApp::setup()
{
    mParams = params::InterfaceGl::create(getWindow(), "Test Params", toPixels(ivec2(200, 200)));
}

void TestParamsApp::mouseUp(MouseEvent event) {
    names.push_back("");
    mParams->addParam("Actor " + std::to_string(nameIdx), &names[nameIdx]);
    nameIdx++;
}

void TestParamsApp::draw()
{
    gl::clear( Color( 0, 0, 0 ) ); 
    mParams->draw();
}

CINDER_APP( TestParamsApp, RendererGl )
#包括“cinder/app/app.h”
#包括“炉渣/应用程序/渲染器gl.h”
#包括“炉渣/gl/gl.h”
#包括“煤渣/参数/参数h”
使用名称空间ci;
使用名称空间ci::app;
使用名称空间std;
类TestParamsApp:公共应用程序{
公众:
无效设置()覆盖;
无效mouseUp(MouseEvent事件)覆盖;
void draw()覆盖;
参数::接口EGLREF mParams;
载体名称;
int nameIdx=0;
};
void TestParamsApp::setup()
{
mParams=params::InterfaceGl::create(getWindow(),“测试参数”,toPixels(ivec2(200200));
}
void TestParamsApp::mouseUp(MouseEvent事件){
名称。推回(“”);
mParams->addParam(“Actor”+std::to_string(nameIdx),&names[nameIdx]);
nameIdx++;
}
void TestParamsApp::draw()
{
gl::透明(颜色(0,0,0));
mParams->draw();
}
CINDER_应用程序(测试参数、渲染器)
然而,在添加第二个元素后,我抛出了异常:读取访问冲突。
\u第一个是0xddddd。

您尝试过调试吗?你发现了什么?是的,我已经调试了很长时间了。当我尝试打印actorNames[0]时,我会收到ascii垃圾。在创建第二个元素时,我在GUI中输入的名称将切换为ascii。基于,您肯定在调用未定义的行为。如果您(a)将容器下标运算符从
obj[idx]
更改为form
obj.at(idx)
以进行运行时边界检查,以及(b)在调试器中运行,则很快就会发现问题。很明显,我们没有足够的代码来做这件事,所以这是你的责任。你给我们的代码没有重现这个问题。你能给我们一个简单的例子,我们可以自己编译吗?代码已经更新,它使用的是框架cinder