Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Taulukot parametreiksi

SukaBljat [17.12.2017 22:16:50]

#

Samaan projektiin liittyen mulla on jatkokysymys. En halua tehdä uutta ketjua. (Mod. huom: no jos nyt kuitenkin?)

Yritän saada kahta erilaista taulukkoa parametreinä funktioon. Ensimmäinen taulukko on yksiuloiteinen string-taulukko ja toinen on kaksiuloitteinen int-tyyppinen taulukko. Niiden parametrien määrittelyjen ja headerin oikein saaminen on niin pirun hankalaa. Missä menee väärin?

Eli .h -tiedosto:

const int rivi = 5;
const int sarake = 3;
void print(const int, const int, string[], int [][sarake]);

päätiedosto.cpp:

int main ()
{
string taulukko_nimet[rivi];
int taulukko_numerot[rivi][sarake];
print(rivi, sarake, taulukko_nimet, taulukko_numerot);
}

Aliohjelma.cpp:

void print(const int rivi, const int sarake, string taulukko_nimet[rivi], int taulukko_numerot[][sarake])
{ ... }

Metabolix [17.12.2017 22:36:56]

#

Ainakin g++:n virheilmoituksissa lukee:

tmp.cpp:15:72: error: use of parameter outside function body before ‘]’ token
 void print(const int rivi, const int sarake, string taulukko_nimet[rivi], int taulukko_numerot[][sarake])
                                                                        ^

Funktion määrittelyssä nimet rivi ja sarake viittaavat funktion parametreihin eivätkä globaaleihin vakioihin, ja siksi funktio ei toimi. Jos kerran parametrien arvot olisivat kuitenkin samat kuin globaalien vakioiden arvot, voisit poistaa nuo parametrit kokonaan. Muussa tapauksessa pitää vaihtaa nimiä niin, että globaalit vakiot erottuvat parametreista.

SukaBljat [17.12.2017 23:00:01]

#

Metabolix kirjoitti:

(17.12.2017 22:36:56): Ainakin g++:n virheil­moi­tuk­sissa lukee: ...

Tein noin ja tällä hetkellä ainoa asia, mistä Visual Studio herjaa on tuo prototyypissä ja funktion otsikossa oleva string-sana, joka on punaisella alleviivattu molemmissa.

.. string taulukko_nimet[] ...

Identifier "string" is undefined. Vaikka se on määritelty pääohjelmassa.

Metabolix [17.12.2017 23:25:58]

#

Varmaan sitten sinulta puuttuu string-sanaan liittyvä include-rivi (tai using-lause) .h-tiedostosta. Kannattaa myös harkita vakavasti using namespace std -rivistä luopumista ja rehellistä std::-etuliitteen käyttöä erilaisten nimitörmäysten välttämiseksi.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta