tablice dynamiczne c++

0

Witam, przerabiam książkę i za zadanie mam modyfikacje kodu, chcę użyć do tego tablicy dynamicznej, ale wyskakuje błąd "no operator [] matches these operands", jest to mi potrzebne gdyż chce żeby użytkownik sam decydował na jakiej planszy chce grać

fragment kodu z błędem:

#include "game.h"
#include <ctime>
#include <iostream>



GAMESTAGE stangry= GS_notstarted;

SIGN gracz;




bool wyborplanszy(int forma){
	if (stangry !=GS_notstarted) return false;
      
	for(int i=0; i<forma;i++){
        for(int j=0; j<forma;j++){
			tablica [i][j]=FLD_empty;
		}}} 

funkcja główna

#include <conio.h>
#include <iostream>
#include "game.h"



void main(){
	
	int rozmiar;
	std::cout<< " podaj rozmiar tablicy";
	std::cin >> rozmiar;
	FIELD **tablica= new FIELD*[rozmiar];
	for (int x = 0; x < rozmiar; x++) {
        tablica[x] = new FIELD[rozmiar];
     }

nagłówek

enum SIGN {SG_circle='0',
	       SG_cross='X'};


enum FIELD {FLD_empty, 
	     	FLD_circle=SG_circle,
			FLD_cross =SG_cross};

enum GAMESTAGE {GS_notstarted,
	            GS_move,
				GS_win,
				GS_draw};



extern GAMESTAGE stangry;

extern FIELD tablica;

bool startgry();

bool ruch(unsigned);

bool rysujplansze();

bool wyborplanszy(int);

Pozdrawiam

0

Gdzieś musisz tworzyć "tablicę", która de facto nie jest tablicą.

0

tutaj w tym co dałeś nie ma żadnego błędu. pokaż linijkę w której ten błąd wyskakuje. Dodatkowo jeżeli są to jakieś obiekty to daj także ich deklaracje

0

Przecież w funkcji wyborplanszy nie ma żadnej zmiennej tablica, ona jest w main. Jak to niby ma działać?

0

moja logika( chyba błędna) jest taka, tworze tablice w funkcji main, dynamiczna, bo nie wiem jaka plansza będzie wybrana przez użytkownika, za pomocą extern daje znać, że takie coś jak tablica istnieje w innym pliku, dzięki rozmiarowi wiem, ile pól muszę wypełnić odpowiednia zmienna, co do błędów, w funkcji tablica falka podkreślone jest pierwszy nawias kwadratowy i podpis - no operators [] matches these operands, a przy kompilacji wyskoczyło binary '[' : 'FIELD' does not define this operator or a conversion to a type acceptable to the predefined operator,

pewnie błędnie interpretuje zakres występowania funkcji, jeśli możecie zrewidujcie mój tok myślenia

każdy z kodów jest w osobnym pliku, czy jest możliwe zdefiniować tablice w pliku z funkcjami np. przed wszystkimi funkcjami, czy dostępna tablica będzie we wszystkich funkcjach ? czy kod się wykona jeśli nie jest w main i nie jest zawarty w funkcji?

0

Nie, tak to nie działa bo zmienna musiałaby być globlana. I absolutnie normalni ludzie tak nie piszą kodu. Użyj tu klas i obiektów jak normalny człowiek.

0

Przenieś definicję zmiennej tablica z main do zakresu globalnego - wtedy extern będzie działać jak powinien. Poza tym przy extern typ jest zły - przecież tablica to podwójny wskaźnik.

Inną sprawą jest to, czy w ogóle taki projekt ma sens (@Shalom właśnie o tym pisze). W przypadku takiego programowania podział na pliki tylko wprowadza zamieszanie, poza tym zmienne możesz przecież po prostu przekazywać do funkcji.

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