Переменная не объявлена в этой области

0

Вот моя часть кода

#include <stdio.h>
#include "W.h"
#include <QtGui/QApplication>
#include <QtGui/QPushButton>
#include <QtGui/QFont>
#include <QtGui/QWidget>
#include <QtGui/QLabel>
#include <QtGui/QImage>
#include <QtGui/QPainter>
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <opencv/cxcore.h>
#include <QTimer>
#include <QImage>
#include <string>
#include <vector>


void PainterWidget::paintEvent(QPaintEvent* event) {
        vector <const char*> p;
        p.push_back("01.jpg");
        p.push_back("02.jpg");
        p.push_back("03.jpg");
        p.push_back("04.jpg");
        p.push_back("05.jpg");
        counter=counter%5;
        QImage img= QImage(p[counter]);
        QPainter painter(this);
        painter.drawImage(0,0,img);
        counter++
        p.clear();

}

Я получаю ошибку "error:" vector "не был объявлен в этой области" Я не могу понять, я уже включил векторную библиотеку, почему ошибка все еще появляется?

Спасибо всем за помощь!

  • 4
    Попробуйте вместо этого std::vector .
Теги:
variables
vector

2 ответа

3
Лучший ответ

Добавить:

using namespace std;

Или префиксный vector с std::

Кстати, вы можете оптимизировать свой код, создавая и заполняя вектор только один раз. Нет смысла делать это для каждого события краски. Кроме того, нет необходимости явно очищать свой вектор, когда это делается, его деструктор (называемый автоматически в вашем случае) делает это.

static std::vector<std::string>& images()
{
    static std::vector<std::string> imagesVect;
    if ( imagesVect.empty() )
    {
        imagesVect.push_back("01.jpg");
        imagesVect.push_back("02.jpg");
        imagesVect.push_back("03.jpg");
        imagesVect.push_back("04.jpg");
        imagesVect.push_back("05.jpg");
    }
    return imagesVect;
}

void PainterWidget::paintEvent(QPaintEvent* event) {
        counter=counter%5;
        QImage img= QImage(images().[counter].c_str());
        QPainter painter(this);
        painter.drawImage(0,0,img);
        counter++;    
}
  • 0
    Это не стандартная библиотека, которая очищает вектор. Это его собственный деструктор, который освобождает выделенную память.
  • 0
    Вы правы, я имел ввиду код STL ....
1

использование

std::vector<const char *>

то есть использовать квалифицированное имя класса, объявленного в пространстве имен std..

Ещё вопросы

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