deklaracja zmiennej w pętli FOR

0

Cześć,

Odkrywając dzisiaj kolejne tajniki języka C natrafiłem na taki oto problem... Dodam iż problem występuje na Microsoft Visual studio 2013 Express

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    int numerek;
    int cyfra;
}struktura; 

void printStruct(struktura f);

int main(){
    
        struktura myStruct;
        myStruct.numerek = 1;
        myStruct.cyfra = 3;

        struktura otherStruct;
        otherStruct.numerek = 2;
        otherStruct.cyfra = 5;
        
        struktura fArray[] = { myStruct, otherStruct };
        for (int i = 0; i < 2; i++)
            printStruct(fArray[i]);

    getchar();
    return 0;
}

void printStruct(struktura f){
    printf("%i/%i\n", f.numerek, f.cyfra);
} 

VS krzyczy mi że: error C2440: 'initializing' : cannot convert from 'struktura' to 'int' ....(w instrukcji FOR)

jak inicjuje zmienną poza pętlą FOR to jest w porzadku, inicjując w FOR jest taki problem...

Prosze o pomoc.
Pozdrawiam,
Mateusz

1

Nie bardzo wiem na jaką pomoc liczysz. Deklarujesz zmienną poza pętlą i tyle, w pętli tylko przypisujesz jej jakąś wartość. Ewentualnie możesz kompilować -std=c99 bo tam jest to dopuszczalne.

0

Dokładnie chodzi mi o to: jak włączyć w VS 2013 ISO C99 abym mógł mieszać deklaracje z kodem ??

0

Krzyczy nie w pętli, tylko przy

struktura fArray[] = { myStruct, otherStruct };

Nie wiem czy to zgodne ze standardem czy nie, ale fakt że GCC ten kod przepuszcza.

Pogódź się z tym faktem, i zrób na około:

    struktura fArray[2];
    fArray[0] = myStruct;
    fArray[1] = otherStruct;

Nie ma to nic wspólnego z pętlą for. VS2013 pozwala na for (int i=0;i<2;i++) i nie trzeba żadnych --std. Nawet nie ma czegoś takiego.

jak włączyć w VS 2013 ISO C99 abym mógł mieszać deklaracje z kodem ?
Nie da się włączyć, bo jest na stałe włączony. Możesz mieszać deklaracje z kodem. Błąd dotyczył czego innego.

0

A wg Ciebie

int a;

to definicja czy deklaracja ?

0

PS. Albo tak:

struktura fArray[] = { { 1, 3 }, { 2, 5 } };

i wtedy bez tych dwóch struktur, od razu inicjalizujesz tablicę.

Albo dla większej przejrzystości:

	struktura fArray[] =
	{
		{
			.numerek = 1,
			.cyfra = 3
		},
		{
			.numerek = 2,
			.cyfra = 5
		}
	};

To też się kompiluje pod VS2013.

0

Ok, W takim razie pozostaje mi tylko się z tym pogodzić i pisać na około.
Dzięki za błyskawiczne podpowiedzi :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1