Очередь типа структуры выдает ошибку

0
typedef struct _Hello
{
char mString[10];
}hello;

Файл.H

 class A{
    void checkSize();
    queue<hello> queue1;
    queue<int> queue2;
    };

.cpp файл

void A::checkSize()
{
   queue1.size(); //a very large erroneous value
   queue2.size(); 0
}

Кто-нибудь знает, почему queue1 дает ошибочное значение? Эта программа работает в поточном режиме, и я проверил всю программу, queue1 не был инициализирован в другом месте. Ошибка уходит, когда я старую очередь queue1. Фактически я подталкивал объект структуры к очереди и предоставлял "место записи нарушения прав доступа".

  • 0
    hello переменная (типа _Hello ). шаблон queue ожидает тип, а не переменную, в качестве параметра. Возможно, вы захотите прочитать о typedef в вашем любимом учебнике по C ++.
Теги:
visual-studio
queue

1 ответ

0

Синтаксис испорчен. Вместо

Struct _Hello {
  char[10] mString;
} hello;

должен быть

struct hello {
  char mString[10];
};

(возможно, mString должна быть std::string, но одна вещь за раз). Важными битами являются:

  • struct с нижним регистром s - C++ чувствительна к регистру
  • Объявление массива имело экстенты не в том месте.
  • в отличие от C, struct hello {... }; объявляет тип hello, а не просто struct hello.
  • Как в C, struct _Hello {... } hello; не объявляет тип hello а переменную hello.
  • _Hello - зарезервированный идентификатор (см. Нижнюю часть страницы), который вам запрещено использовать, поскольку он зарезервирован для реализации.

О, и ты забыл ; после определения класса A

  • 0
    Хорошо, я сделал изменения своего рода код puesdo. Пожалуйста, взгляните на последний абзац, дайте мне знать, если у вас есть предложения по решению проблемы :)
  • 2
    Код, который вы изначально разместили, даже не был бы скомпилирован. Почему ваш реальный код ведет себя странно - это вопрос, на который я не могу ответить без соответствующих битов этого кода ( MCVE ). Я могу дико догадаться, что вы пишете за пределами буфера, который находится непосредственно перед объектом A в памяти и тем самым разбивает очередь, или делает то же самое для члена этого объекта, который лежит перед очередью в объекте , но мне не хватает информации, чтобы дать надежный совет.

Ещё вопросы

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