Inicialmente el vector «perm» es nulo. Quiero establecer a cero, basado en el índice del bucle. Pero he encuentro de error «vector subíndice fuera del intervalo» mientras se hace el siguiente código.

Puse «perm(charLength, 0)» en el «Start()» método fuera de cualquier bucle de modo que no se perderá, sino que se utiliza para la acumulación de valores.

DecodeEngine.h

class DecodeEngine
{

public:

    vector<int> temp;
    vector<int> perm;

    //Default constructor
    DecodeEngine();


    //Declare a virtual destructor:
    virtual ~DecodeEngine();

    //Methods
    string GetFilePath();
    Mat Start();
    void FrameTo8by8();         
};

DecodeEngine.cpp

Mat DecodeEngine::Start()
{
charLength = 160;
//Initialize perm to zero
perm(charLength, 0);
//Loop 1st 100 frame of header
while(true)
{
if(frame_count <= 100)
{
FrameTo8by8();                  //Proccess and algorithm
namedWindow("dctBlockImage"); 
imshow("dctBlockImage", dctImage);      //display watermarked image
if(waitKey(30) == 27) //wait for 'esc' key press for 30 ms. If 'esc' key is pressed, break loop
{
cout << "esc key is pressed by user" << endl; 
break; 
}
frame_count++;
}
else
{
cout << endl;
cout << "End of video" << endl;
cout << endl;
destroyWindow("Original Video");
destroyWindow("dctBlockImage");
break;
}
}
void DecodeEngine::FrameTo8by8()
{
for(int i = 0; i < height-16; i += 16)
{
for(int j = 0 ; j < width-16; j += 16)
{
if(j > 112)
{
if(((sum4 / 4) - avg) > 0)
{
value = 0;
temp.push_back(value);
}
else
{
value = 1;
temp.push_back(value);
}
}
if(temp.size() == charLength)
{
for(int a = 0; a <= temp.size(); a ++)
{
//Initialize perm to zero
perm[a] = 0;
if(temp[a] == 1)
{
perm[a]++;
}
//Reset temp for next frame to use
temp[a] = 0;
}
}                
}
}
}
  • No le dijo acerca de for(int a = 0; a <= temp.size(); a ++) la última vez que se le preguntó acerca de esto?
  • algunos de mis códigos faltan en el post anterior, estas es la nueva pregunta
InformationsquelleAutor user3743939 | 2014-08-12

2 Comentarios

  1. 2

    Esta línea:

    perm(charLength, 0);

    No se llama al constructor std::vector(size_t, const T&) e inicializar el vector con 160 elementos de valor 10. De hecho, no veo la manera de que compilan a todos desde el vector de la clase no tiene un operator().

    std::vector contiene una función miembro assign() que usted puede en lugar de:

    perm.assign(charLength, 0);
    • Gracias tengo la opción de inicializar a cero.
  2. 0

    En el siguiente fragmento de código, puede ir fuera de rango:

       ...
    if(temp.size() == charLength)   //ok!  temp.size() is same as perm.size() 
    {
    for(int a = 0; a <= temp.size(); a ++)   //!!! loop will execute with a=temp.size() and stop afterwards
    {
    //Initialize perm to zero
    perm[a] = 0;                    //!!! but subscripts start with 0 and go to temp.size()-1

Dejar respuesta

Please enter your comment!
Please enter your name here