Problem z wyświetleniem wartości tablicy dwuwymiarowej zawierającej obiekty

0

Witam.

Chciałbym poprosić Was o znalezienie błędu w moim kodzie.

Kod wygląda tak:

 class Obrazek
{
public:
	bool ramka; //true if yes, false if no
	int kolor;	//1 = bialy, 2 = czarny
	string img;

	Obrazek(bool _ramka, int _kolor)
	{
		this->ramka = _ramka;
		this->kolor = _kolor;

		if(1 == kolor)
		{
			img = "bialy";
		}
		else if(2 == kolor)
		{
			img = "czarny";
		}
		else
		{
			img = "Bledna wartosc!";
		}
	}



private:
};

int main()
{
	Obrazek* myArray[][8] = 
	{	
		{new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2),new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2)},
		{new Obrazek(false, 2), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(false, 2)},
		{new Obrazek(false, 2), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(false, 2)},
		{new Obrazek(false, 2), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(false, 2)},
		{new Obrazek(false, 2), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(false, 2)},
		{new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2),new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2)}
	};

	for( int i = 0; i < 6; i++)
	{

		for( int j=0; j< 8; j++ )
		{
			if(myArray[i][j]->ramka = true)
				cout<< 0 << "=" << myArray[i][j]->img << " ";
			else
				cout<< 1 << "=" << myArray[i][j]->img << " ";

		} 
		cout<<endl;

    }


	system("PAUSE");
	return 0;
}

Problem polega na tym, że po skompilowaniu mam taki oto wynik na konsoli:

0=czarny 0=czarny 0=czarny 0=czarny 0=czarny 0=czarny 0=czarny 0=czarny
0=czarny 0=bialy 0=bialy 0=bialy 0=bialy 0=bialy 0=bialy 0=czarny
0=czarny 0=bialy 0=bialy 0=bialy 0=bialy 0=bialy 0=bialy 0=czarny
0=czarny 0=bialy 0=bialy 0=bialy 0=bialy 0=bialy 0=bialy 0=czarny
0=czarny 0=bialy 0=bialy 0=bialy 0=bialy 0=bialy 0=bialy 0=czarny
0=czarny 0=czarny 0=czarny 0=czarny 0=czarny 0=czarny 0=czarny 0=czarny

czyli pierwszy parametr który przekazuję do konstruktora przy tworzeniu obiektów w tablicy zawsze jest ustawiony na "true", nie rozumie dlaczego :( Co ciekawe drugi parametr wyświetla się prawidłowo.

Tak więc jeśli możecie, to proszę o wytknięcie palcem błędu ;)

0

zapomniałeś ,że znak równości to "=="

 
if(myArray[i][j]->ramka == true)

W twoim przypadku najpierw ustawiałeś składowej "ramka" wartość true. Później w tym ifie sprawdzałeś czy wartość tego wyrażenia jest prawdą. Oczywiście ten warunek będzie zawsze spełniony.

0

O ja Cie nie mogę, ale wstyd :)

A ja się przez pół godziny gapiłem w kod i nie zauważyłem tego :)

Właśnie dlatego staram się dawać stałą po lewej stronie porównania, aby w przypadku takiego "czecha" kompilator zwrócił mi uwagę. Tutaj z niewiadomego powodu zrobiłem inaczej niż zwykle i od razu zostałem pokarany.

Dziękuję za pomoc, temat można zamknąć, problem rozwiązany :)

0
        Obrazek* myArray[][8] = 
        {        
                {new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2),new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2)},
                {new Obrazek(false, 2), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(false, 2)},
                {new Obrazek(false, 2), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(false, 2)},
                {new Obrazek(false, 2), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(false, 2)},
                {new Obrazek(false, 2), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(true, 1), new Obrazek(false, 2)},
                {new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2),new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2), new Obrazek(false, 2)}
        };

WTF?

for(int i = 0; i < 6; ++i) {
	for(int j = 0; j < 8; ++j) {
		bool b_tmp = true;
		int i_tmp = 1;
		if(i == 0 || i == 5 || j == 0 || j == 7) {
			b_tmp = false;
			i_tmp = 2;
		}
		myArray[i][j] = new Obrazek(b_tmp, i_tmp);
	}
}

Chociazby tak i juz jakos wyglada...

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