[C++] klasy i tablica dwuwymiarowa

diego_maradona
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 16 cze 2010, o 00:59
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 80 razy

[C++] klasy i tablica dwuwymiarowa

Post autor: diego_maradona »

Tym razem program mojego autorstwa, pliki z klasą i definicją funkcji dobrze zawarte w projekcie


ticTacToe.h

Kod: Zaznacz cały

#pragma once

class ticTacToe
{
public:

ticTacToe();
//constructor, it initialises the 3X3 board of *
	
void printBoard() const;
//function to print a board

void getAMove();

void moveValidation();

void determineWinner();



private:
static char board[3][3];
};
ticTacToe.cpp

Kod: Zaznacz cały

#include "stdafx.h"
#include "ticTacToe.h"
#include <iostream>


using namespace std;

ticTacToe::ticTacToe()
{
	int row, col;
	
	for (row=0 ; row < 3 ; row++)
		for (col=0 ; col < 3 ; col++)
		board[row][col]='*';
	
}



void ticTacToe::printBoard() const
{
	
	int row , col;

	for (row=0 ; row < 3 ; row++)
		{
			cout<<endl;
			for (col=0 ; col < 3 ; col++)
			cout << board[row][col] << " ";
		}
}
Tic-Tac-Toe.cpp

Kod: Zaznacz cały

#include "stdafx.h"
#include <iostream>
#include "ticTacToe.h"

using namespace std;

int main()
{
	ticTacToe player1;
	ticTacToe player2;

    cout<< "Let's start the game \n";
    
	player1.printBoard();



	cout<<endl;
	system("PAUSE");
	return 0;
}
W przyszłości ma on wyewoluować w grę kółko i krzyżyk, dlatego zmienna w klasie musi być static ( ponieważ zmiany dokonane przez gracza muszą wpływać na postać planszy widocznej prze gracza 2 ). Po skompilowaniu wyskakuje
1>ticTacToe.obj : error LNK2020: unresolved token (0A000321) "private: static char (* ticTacToe::board)[3]" (?board@ticTacToe@@0PAY02DA)
1>ticTacToe.obj : error LNK2001: unresolved external symbol "private: static char (* ticTacToe::board)[3]" (?board@ticTacToe@@0PAY02DA)
Zupełnie nie wiem dlaczego ale po usunięciu static'a wszystko jest ok :|
Crizz
Użytkownik
Użytkownik
Posty: 4094
Rejestracja: 10 lut 2008, o 15:31
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 12 razy
Pomógł: 805 razy

[C++] klasy i tablica dwuwymiarowa

Post autor: Crizz »

diego_maradona pisze:Zupełnie nie wiem dlaczego ale po usunięciu static'a wszystko jest ok :|
Ano dlatego, że pola statyczne trzeba jeszcze deklarować poza deklaracją klasy, w zasiegu globalnym. To jednak nie jest największy problem tego programu.

Czy w realiach gry w kółko i krzyżyk prawdziwa jest relacja "użytkownik zawiera planszę"? Czemu na siłę chcesz, żeby plansza była elementem klasy gracza?
Rada na przyszłość:    
wszamol
Użytkownik
Użytkownik
Posty: 490
Rejestracja: 7 maja 2009, o 22:01
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 64 razy

[C++] klasy i tablica dwuwymiarowa

Post autor: wszamol »

Dość popularny błąd na początku, warto poczytać ... e_w_klasie
diego_maradona
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 16 cze 2010, o 00:59
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 80 razy

[C++] klasy i tablica dwuwymiarowa

Post autor: diego_maradona »

Crizz pisze: Ano dlatego, że pola statyczne trzeba jeszcze deklarować poza deklaracją klasy, w zasiegu globalnym. To jednak nie jest największy problem tego programu.
Ale bezsens, niby dlaczego statyczne trzeba deklarować a nie-statyczne nie trzeba?

Tak czy siak dodałem w pliku ticTacToe.cpp globalną deklarację

Kod: Zaznacz cały

char ticTacToe::board[3][3];
i wsio działa jak należy.

Czyli problem językowy rozwiązany, teraz trzeba rozprawić się z algorytmem. Sugerujesz, że lepiej będzie stworzyć dwie klasy - związaną z użytkownikiem oraz związaną z planszą?
Crizz
Użytkownik
Użytkownik
Posty: 4094
Rejestracja: 10 lut 2008, o 15:31
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 12 razy
Pomógł: 805 razy

[C++] klasy i tablica dwuwymiarowa

Post autor: Crizz »

Taki model obiektowy będzie poprawniej odzwierciedlać rzeczywisty problem.
ODPOWIEDZ