Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przekazywanie statycznej tablicy do nagłówka i z powrotem.

Ostatnio zmodyfikowano 2014-08-26 21:53
Autor Wiadomość
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 :

C/C++
#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:

C/C++
#include<iostream>

using namespace std;

extern const int iX;
extern const int iY; // zmienne globalne dla całego programu
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
C/C++
int wypisz( int iX, int iY, int tTab[ iX ][ iY ] ) {
    // blok instrukcji
}

Da się coś takiego zrobić? A może idę zupełnie w innym kierunku.
Będę wdzięczny za pomoc :)
Pozdrawiam.
P-116089
pekfos
» 2014-08-25 21:53:09
Umieść
C/C++
const int iX = 4;
const int iY = 6;
w nagłówku.
P-116091
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
P-116097
pekfos
» 2014-08-25 22:22:31
P-116098
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ąć ?
P-116112
pekfos
» 2014-08-26 11:16:34
A czy da się to jakoś ominąć ?
Nie tworzyć tablic w ten sposób.
P-116113
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 ?
P-116114
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.
P-116116
« 1 » 2
  Strona 1 z 2 Następna strona