C++矢量实例变量

0 c++ stdvector

我对C++比较陌生,我遇到了一个我无法解决的问题.我得到的确切错误是:

Pg1_raycast_nabrown3.exe中0x760d34c5的第一次机会异常:0xC0000005:访问冲突读取位置0x0e296575.Pg1_raycast_nabrown3.exe中0x760d34c5处的未处理异常:0xC0000005:访问冲突读取位置0x0e296575.

当我尝试访问矢量实例变量时会产生这些.这是代码:

group.h

class Group {

private:
    string name;
    vector<Face*> members;
    Material* material;

public:
    Group(string n);
    ~Group();

    void addFace(Face* f);
    string getName();
    vector<Face*> getMembers();
    void setMaterial(Material * mat);
    Material* getMaterial();
};
Run Code Online (Sandbox Code Playgroud)

group.cpp

// Constructor
Group::Group(string n) {
    name = n;
}

// Deconstructor
Group::~Group() {}

/**
*   addFace
*
*   adds the provided face to this group
*/
void Group::addFace(Face* f) {

    // DEBUGGING
    OutputDebugStringA("A\n");
    OutputDebugStringA("A " + members.size());
    members.resize(members.size() + 1);
    OutputDebugStringA("B\n");
    OutputDebugStringA("B " + members.size());

    members.push_back(f);
}
Run Code Online (Sandbox Code Playgroud)

调试语句只打印出单个"A",因此它会在第一个members.size()调用时崩溃.addFace()函数是从另一个类调用的,但我不认为这应该是相关的代码.没有其他任何东西与成员矢量相互作用.

任何帮助是极大的赞赏.

编辑: 显然,我对调试语句的尝试导致了更多问题.我想要注意的是,即使删除你指出错误的调试语句,我仍然会收到原始错误.

void Group::addFace(Face* f) {

    // DEBUGGING
    OutputDebugStringA("A\n");

    members.push_back(f);

    // DEBUGGING
    OutputDebugStringA("B\n");
}
Run Code Online (Sandbox Code Playgroud)

Raf*_*zuk 5

你不能在c ++中连接类似的字符串."A " + members.size()是无效的指针算术.

您应该创建std::string"A "和转换members.size()std::string,所以这条线应该是这样的:

OutputDebugString((std::string("A ") + std::to_string(members.size())).c_str());
Run Code Online (Sandbox Code Playgroud)

你需要#include <string>为此工作.