C++;向量实例变量 我对C++比较陌生,我遇到了一个我无法解决的问题。我得到的确切错误是:

C++;向量实例变量 我对C++比较陌生,我遇到了一个我无法解决的问题。我得到的确切错误是:,c++,stdvector,C++,Stdvector,Pg1_raycast_nabrown3.exe中0x760d34c5处的首次机会异常: 0xC0000005:访问冲突读取位置0x0e296575。未处理 Pg1_raycast_nabrown3.exe中0x760d34c5处出现异常:0xC0000005: 访问冲突读取位置0x0e296575 当我尝试访问向量实例变量时,会产生这些变量。代码如下: 组.h class Group { private: string name; vector<Face*> me

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

当我尝试访问向量实例变量时,会产生这些变量。代码如下:

组.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();
};
debug语句只打印出一个“a”,因此它会在第一个members.size()调用时崩溃。addFace()函数是从另一个类调用的,但我认为这与代码无关。没有其他东西与成员向量交互

非常感谢您的帮助

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

void Group::addFace(Face* f) {

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

    members.push_back(f);

    // DEBUGGING
    OutputDebugStringA("B\n");
}

不能在C++中像这样连接字符串。代码>“A”+members.size()是无效的指针算术

您应该从
“A”
创建
std::string
,并将
成员.size()
转换为
std::string
,因此此行应该如下所示:

OutputDebugString((std::string("A ") + std::to_string(members.size())).c_str());

您需要<代码>包含< /代码>,以便工作。

您不能在C++中像这样连接字符串。代码>“A”+members.size()是无效的指针算术

您应该从
“A”
创建
std::string
,并将
成员.size()
转换为
std::string
,因此此行应该如下所示:

OutputDebugString((std::string("A ") + std::to_string(members.size())).c_str());

您需要
#包括
,这样才能工作。

resize()
如果向量需要增长,则向其添加新的默认构造对象。您可能需要使用
reserve()
。问题是否与
OutputDebugString
有关?
members.size()
的结果不是
string
或字符串文字,而是一个整数值,因此
“a”+members.size()
可能会导致奇怪的行为。更喜欢像
“A”+std::to_string(members.size())
这样的东西,您不需要使用成员。如果需要,调整大小、向后推将重新分配向量。
向后推将根据需要增加向量,因此,
addFace
中的几乎所有代码似乎都不是必需的。请尝试在调试器中运行,看看您得到了什么样的回溯。我的猜测是,您正在对无效的组指针调用addFace,但我们无法从您发布的代码中捕捉到这一点。
resize()
在向量需要增长时向其添加新的默认构造对象。您可能需要使用
reserve()
。问题是否与
OutputDebugString
有关?
members.size()
的结果不是
string
或字符串文字,而是一个整数值,因此
“a”+members.size()
可能会导致奇怪的行为。更喜欢像
“A”+std::to_string(members.size())
这样的东西,您不需要使用成员。如果需要,调整大小、向后推将重新分配向量。
向后推将根据需要增加向量,因此,
addFace
中的几乎所有代码似乎都不是必需的。请尝试在调试器中运行,看看您得到了什么样的回溯。我猜您是在无效的组指针上调用addFace,但是我们无法从您发布的代码中捕捉到这一点
OutputDebugString
不会接受
std::string
作为参数,尽管您的其他观点是正确的。正确的用法应该是
OutputDebugString((std::string(“A”)+std::to_string(members.size()).c_str())好的捕获。更新了我的答案。感谢幸运的是,我无法使用to_string,因为它总是导致“错误:重载函数的多次实例”。
OutputDebugString
不会接受
std::string
作为参数,尽管您的其他观点是正确的。正确的用法应该是
OutputDebugString((std::string(“A”)+std::to_string(members.size()).c_str())好的捕获。更新了我的答案。感谢幸运的是,我无法使用to_字符串,因为它总是导致“错误:重载函数的多次实例”。