2012-01-09 2 views
12

Al 2 ° ciclo for, ottengo il seguente errore da gcc:C++ per-loop struttura con più di inizializzazione variabile

error: expected unqualified-id before 'int' 

Non sono sicuro di quello che mi manca. Ho esaminato la documentazione su come dovrebbe apparire un ciclo for e sono ancora confuso. Cosa c'è che non va qui?

#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] << ' '; 
    } 
} 

risposta

15

provare senza la prima intcol.

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

+0

Grazie - non me ne sono affatto accorto. – jdphenix

+0

Possiamo eseguire un'operazione logica tra le due condizioni relative alle variabili 'i' e' j' nel segnaposto per la condizione nel ciclo 'for'? – Chaitanya

+0

@Chaitanya si. – jweyrich

3

Questo dovrebbe risolvere il problema

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 definizione variabile va in questo modo

tipo di dati nome_variabile [= valore_init] [, nome_variabile [= valore_init]] *;

+1

L'ultima frase non è proprio vera. Ad esempio, il seguente è valido: 'int w, * x, (* y) (int, int), z;' –

+0

Accetto! Non sono riuscito a trovare la definizione di dichiarazione delle variabili degli standard C++. Quindi hanno dato una rappresentazione astratta di una dichiarazione var. qui il nome della variabile non conferma strettamente a [a-zA-Z] [a-zA-Z0-9] *. Può anche significare * x, ad es. int w = 10, * x = NULL; Grazie per il chiarimento ! :) –

7

Altri hanno già detto come risolvere il problema che hai notato. Su una nota piuttosto diversa, in questo:

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

Sembra quasi certo che l'ultima dichiarazione qui: col==0; è davvero destinato ad essere col=0;.

+0

Questo sarebbe vero - questo è stato un semplice caso di prova che ho messo insieme per la domanda. Buona pesca – jdphenix

2

Non dichiarare int dopo l'uso virgola,

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

Questo è simile a un normale variabili multiple dichiarazione/inizializzazione in una linea utilizzando un operatore virgola. È possibile effettuare ciò:

int a = 1, b = 2; 

dichiarare 2 ints. Ma non questo:

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