Se deben evitar bucles como este:
for ( int i = 0, linea = 8; i < linea ; i++ ){
for ( int j = 0, linea = 8; j < linea ; j++ )
( i % 2 != 0 && j == 0 ) ? ++linea, cout << ' ' : cout << '*' ;
cout << endl ;
}
Ya que abren la puerta a errores lógicos al tener tres variables con el mismo nombre "linea" pero con ámbito distinto.
Para explicarlo mejor el bucle es (en concepto) equivalente a:
{
int i = 0;
int linea = 8;
while (i < linea){
int j = 0;
int linea = 8;
while (j < linea){
( i % 2 != 0 && j == 0 ) ? ++linea, cout << ' ' : cout << '*';
j++;
}
cout << endl;
i++;
}
}
Ya que la intención es imprimir un espacio antes de las lineas pares se puede sacar la comprobación del bucle externo colocandola en el interno:
void imprime()
{
linea = 8;
for (int i = 0; i < linea; i++){
if (i % 2)
cout << ' ';
for (int j = 0; j < linea; j++)
cout << '*';
cout << endl;
}
}
Ya por ultimo el valor del campo "linea" debería definirse en otra función y utilizando la clase string se puede eliminar el bucle interno (en su lugar se crea previamente una cadena compuesta por asteriscos).
Todos esto espero se tome como una critica constructiva.
Un saludo