C / C ++ soukromé inicializaci pole v záhlaví souboru

hlasů
4

Mám třídu nazvanou Cal a to cpp a .h protějšek

Headerfile má

class Cal {
    private:
        int wa[2][2];

    public:
        void do_cal();
};

Soubor cpp má

#include Cal.h
void Cal::do_cal() {
   print(wa) // where print just itterates and prints the elements in wa
}

Moje otázka je, jak mohu inicializovat pole wa? Já prostě nedokážu dostat se do práce.

Snažil jsem se:

int wa[2][2] = {
                {5,2},
                {7,9}
               };

v záhlaví souboru, ale jsem si chyby, říkat nemůžu dělat tak jak je to proti iso..something.

Zkoušel také k inicializaci pole wav konstruktoru, ale že didnt práce buď .. Co mám chybí?

dík

Položena 06/02/2009 v 17:06
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
10

Pokud to může být statická, můžete jej inicializovat v souboru cpp. Přidat statické klíčové slovo v deklaraci třídy:

class Cal {
    private:
        static int wa[2][2];
    public:
        void do_cal();
};

a v rámci souboru v cpp souboru přidejte:

#include "Cal.h"
int Cal::wa[2][2] = { {5,2}, {7,9} };
void Cal::do_cal() {
   print(wa) // where print just itterates and prints the elements in wa
}

Pokud ho nikdy nezmění, bude to fungovat dobře (spolu se dělat to const). Jediné, co si ten, který je sdílený s každou instanci vaší třídě ačkoli.

Odpovězeno 06/02/2009 v 19:50
zdroj uživatelem

hlasů
7

Nelze inicializovat prvků pole v deklaraci třídy. Nedávno jsem se snažil najít způsob, jak udělat právě to. Z toho, co jsem se dozvěděl, co musíte udělat, je ve své funkci inicializovat jeden prvek najednou.

Cal::Cal{
   wa[0][0] = 5;
   wa[0][1] = 2;
   wa[1][0] = 7;
   wa[1][1] = 9;
}

Je možné (a pravděpodobné), že tam je mnohem lepší způsob, jak to udělat, ale z mého výzkumu v minulém týdnu, je to, jak to udělat s multi dimenzionální matice. Mám zájem, pokud má někdo lepší způsob.

Odpovězeno 06/02/2009 v 17:12
zdroj uživatelem

hlasů
5

Můžete to udělat jednoduše. Pokud si nechcete specifikovat každý prvek jednotlivě jako v Perchik odpověď , můžete vytvořit jeden statické pole a memcpyže (což bude pravděpodobně rychleji netriviálních velikostí pole):

namespace
{
    const int default_wa[2][2] = {{5, 2}, {7, 9}};
}

Cal::Cal
{
    memcpy(&wa[0][0], &default_wa[0][0], sizeof(wa));
}
Odpovězeno 06/02/2009 v 17:17
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more