2012-01-09 22 views
12

En el segundo ciclo for, me sale el siguiente error de gcc:estructura C++ para bucle con múltiples inicialización de variables

error: expected unqualified-id before 'int' 

No estoy seguro de lo que me falta. He revisado la documentación de cómo debe verse un bucle for y todavía estoy confundido. ¿Qué pasa aquí?

#include <iostream> 
#include <vector> 

int main() { 
std::vector<int> values; 

for (int i = 0; i < 20; i++) { 
    values.push_back(i); 
} 

std::cout << "Reading values from 'std::vector values'" << std::endl; 
for (int i = 0, int col = 0; i < values.size(); i++, col++) { 
    if (col > 10) { std::cout << std::endl; col == 0; } 
    std::endl << values[i] << ' '; 
    } 
} 

Respuesta

15

Try sin la int antes col.

for (int i = 0, col = 0; i < values.size(); i++, col++)

+0

Gracias - No me di cuenta de esto en absoluto. – jdphenix

+0

¿Podemos realizar una operación lógica entre las dos condiciones correspondientes a las variables 'i' y' j' en el marcador de posición para la condición en el bucle 'for'? – Chaitanya

+0

@Chaitanya sí. – jweyrich

3

Esto debe fijarlo

for (int i = 0, col = 0; i < values.size(); i++, col++) { 
    if (col > 10) { std::cout << std::endl; col == 0; } 
    std::endl << values[i] << ' '; 
    } 
} 

una definición de variable va como esto

variable_name tipo de datos [= init_value] [, variable_name [= init_value]] *;

+1

La última frase no es verdadera. Por ejemplo, lo siguiente es válido: 'int w, * x, (* y) (int, int), z;' –

+0

¡Estoy de acuerdo! No pude encontrar la definición de declaración de variables de los estándares de C++. Por lo tanto, hemos dado una representación abstracta de una declaración var. aquí el nombre de la variable no confirma estrictamente a [a-zA-Z] [a-zA-Z0-9] *. También puede significar * x, p. int w = 10, * x = NULL; Gracias por aclararlo ! :) –

7

Otros ya le han dicho cómo solucionar el problema que ha notado. En una nota bastante diferente, en este:

if (col > 10) { std::cout << std::endl; col == 0; } 

Parece casi seguro que la última declaración aquí: col==0; es realmente la intención de ser col=0;.

+0

Eso sería cierto: este fue un caso de prueba simple que armé para la pregunta. Buena atrapada – jdphenix

2

no declaran int después de su uso por comas,

for (int i = 0,col = 0; i < values.size(); i++, col++) { 
    if (col > 10) { std::cout << std::endl; col == 0; } 
    std::endl << values[i] << ' '; 
    } 
} 
0

Esto es similar a un habitual múltiples variables declaración/inicialización en una línea usando un operador de coma. Puede hacer esto:

int a = 1, b = 2; 

declarando 2 ints. Pero esto no:

int a = 1, int b = 2; //ERROR 
Cuestiones relacionadas