Vercevales Temat założony przez niniejszego użytkownika |
Przekazywanie statycznej tablicy do nagłówka i z powrotem. » 2014-08-25 21:49:11 Witajcie! Dawno mnie tu nie było :D Wróciłem do nauki C++ i oto mój problem: To jest część programu głównego *.cpp : #include<iostream> #include<cstdlib> #include<time.h> #include"wypisywanie.h"
using namespace std;
const int iX = 4; const int iY = 6;
void wypelnij( int tTab[ iX ][ iY ] ) { srand( time( NULL ) ); for( int i = 0; i < iX; i++ ) for( int j = 0; j < iY; j++ ) tTab[ i ][ j ] = rand() % 10; }
No i w programie głównym ta stała jest traktowana jak stała i tablice deklarowane przy użyciu iX i iY bez problemu są kompilowane. Mój problem zaczyna się tu, w pliku nagłówkowym, gdy chcę utworzyć tablicę, której wymiary będą stanowiły stałe globalne zdefiniowane w programie głównym. Stałe te w programie głównym działają bez zarzutu do tworzenia tablic, lecz w nagłówku nie chcą. Wiem, że są wiadomymi, ponieważ wpisując cout << ta_sta ł a wyświetli się ona, a jednak kompilator wywali błąd, że nie jest to stała i nie może zrobić takiej tablicy. Oto nagłówek: #include<iostream>
using namespace std;
extern const int iX; extern const int iY; extern int tTab[ iX ][ iY ];
Bez znaczenia jest akurat to (****), bo dla potrzeby testów kombinowałem różności z deklarowaniem (i niedeklarowaniem) tej tablicy, jednak do pewnej funkcji tablicę muszę przekazać, bo ta funkcja odpowiada za wypisanie zawartości na ekran. Tam też wyskakuje błąd z tablicą, która nie może być skompilowana, bo nie ma stałych w klamerkach [] Mowa o takiej funkcji int wypisz( int iX, int iY, int tTab[ iX ][ iY ] ) { }
Da się coś takiego zrobić? A może idę zupełnie w innym kierunku. Będę wdzięczny za pomoc :) Pozdrawiam. |
|
pekfos |
» 2014-08-25 21:53:09 Umieść const int iX = 4; const int iY = 6; w nagłówku. |
|
Vercevales Temat założony przez niniejszego użytkownika |
» 2014-08-25 22:15:57 Wiem, że to by pomogło, ale ja chciałbym, aby mój nagłówek był uniwersalny. Abym nie musiał modyfikować zawartych w nim stałych w zależności od programu głównego. Chciałbym aby nagłówek sam przy pomocy extern pobierał stałe globalne z programu głównego i używał ich do tworzenia tablic w tymże nagłówku |
|
pekfos |
» 2014-08-25 22:22:31 |
|
Vercevales Temat założony przez niniejszego użytkownika |
» 2014-08-26 11:01:09 Dziękuję. O to mi chodziło. Już rozumiem dlaczego takie coś jest błędem. A czy da się to jakoś ominąć ? |
|
pekfos |
» 2014-08-26 11:16:34 A czy da się to jakoś ominąć ? |
Nie tworzyć tablic w ten sposób. |
|
Vercevales Temat założony przez niniejszego użytkownika |
» 2014-08-26 11:37:45 A jest jakaś możliwość stworzenia zewnętrznego pliku, który przyjmowałby w ten sposób tablice ? |
|
pekfos |
» 2014-08-26 13:00:13 A jest jakaś możliwość stworzenia zewnętrznego pliku, który przyjmowałby w ten sposób tablice ? |
Co..? Nie może tu być mowy o żadnym przekazywaniu, czy przyjmowaniu czegokolwiek z/do nagłówków. To w ogóle nie działa w ten sposób.. Nie możesz z jednej jednostki translacji wpływać na kod w innej. Możesz sobie mieć globalną tablicę, ale jej rozmiar ma być znany w momencie jej deklarowania, jeśli nie możesz spełnić tego warunku, użyj np std::vector<>, lub innych sposobów na pamięć o nieokreślonym z góry rozmiarze. |
|
« 1 » 2 |