Переменная экземпляра C ++ вектора

0

Я относительно новичок в C++, и у меня возникла проблема, которую я не смог решить. Точная ошибка, которую я получаю:

Исключение из первого шанса в 0x760d34c5 в Pg1_raycast_nabrown3.exe: 0xC0000005: место чтения нарушения доступа 0x0e296575. Необработанное исключение в 0x760d34c5 в Pg1_raycast_nabrown3.exe: 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();
};

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);
}

Операторы отладки распечатывают только один "А", поэтому он разбивается на первый вызов members.size(). Функция addFace() вызывается из другого класса, но я не думаю, что это должен быть соответствующий код. Ничто иное не взаимодействует с вектором-членами.

Любая помощь приветствуется.

EDIT: Очевидно, мои попытки отладочных заявлений вызывают больше проблем. Я хочу отметить, что даже удаление операторов отладки, которые вы указали как ошибочные, я по-прежнему получаю исходную ошибку.

void Group::addFace(Face* f) {

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

    members.push_back(f);

    // DEBUGGING
    OutputDebugStringA("B\n");
}
  • 0
    resize() добавляет новые построенные объекты по умолчанию к вектору, если он должен расти. Вы, вероятно, хотите, чтобы reserve() вместо этого.
  • 3
    проблема может быть связана с OutputDebugString ? Результат members.size() - это не string или строковый литерал, а целочисленное значение, поэтому "A " + members.size() может привести к странному поведению. Предпочитаю что-то вроде "A " + std::to_string(members.size())
Показать ещё 7 комментариев
Теги:
stdvector

1 ответ

5

Вы не можете конкатенировать строки, подобные этому в c++. "A " + members.size() является неправильной арифметикой указателя.

Вы должны создать std::string из "A " и преобразовать members.size() в std::string, так что эта строка должна выглядеть так:

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

Для этого вам нужно будет #include <string>.

  • 1
    OutputDebugString не примет std::string в качестве аргумента, хотя остальные ваши точки верны. Правильное использование будет OutputDebugString((std::string("A ") + std::to_string(members.size())).c_str());
  • 0
    Хороший улов. Обновил мой ответ. Спасибо
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню