Zwaracanie tablicy przez funkcje w klasie.

0

Mam dwa problemy:

mam jakąś klasę, załóżmy o takiej konstrukcji:

class nazwaKlasy
{
	public:
		int x;
		nazwaKlasy();
		bool tablica[x];
		int funkcjaKlasy();

};

nazwaKlasy::nazwaKlasy(){
	x=4;
}


int nazwaKlasy::funkcjaKlasy()
{
	
	for (int i = 0; i < x; i++) {
	srand ( time(NULL) );
	tab[i] = rand() % 75 + 50;

	return tab;
	}
  1. Jak sprawić by pole klasy jakiegos typu (tutaj int x) mogło być rozmiarem innego pola typu tablicowego (tutaj bool tablica[x])
  2. Jak sprawic by funkcja klasy (tutaj funkcjaKlasy()) zwracała tablice (tutaj tab)

Kompilator zwraca taki błąd
[BCC32 Error] file2.cpp(18): E2313 Constant expression required
przy linijce

	bool tablica[x]

i taki
[BCC32 Error] file2.cpp(39): E2235 Member function must be called or its address taken
przy tej linii

	return tab;
0
  1. zadeklaruj tablice jako tablica[];
  2. przy ustalaniu wartosci x wykonaj alokowanie miejsca w tablicy: new tablica[x]; albo jakos tak
  3. zamiast zwracac int zwracaj int[]
0
int *nazwaKlasy::funkcjaKlasy()

Musisz zwrócić wskaźnik na pierwszy element tej tablicy :)

0
matek3005 napisał(a)

++++[>+++<-]>[>+++[>+++<-]<-]>>+.>+++[<---->-]<.>++++[<+++++>-]<-.>+++[<----->-]<.++++++.>+++++++[<-------->-]<.---..+++++.

Huh, Brainfuck! Pochwalę się, że napisałem własny interpreter, z optymalizacją i kompilacją JIT – masakrycznie szybki, ale w życiu nie napisałem choćby Hello worlda w tym języku..

0

Ok, zrobiłem tak:

class nazwaKlasy
{
        public:
                const static int x=4;
                bool tablica[x];
                int *funkcjaKlasy();

};

int nazwaKlasy::funkcjaKlasy()
{
        int *tab=new int[rozmiarTasmy];
        for (int i = 0; i < x; i++) {
        srand ( time(NULL) );
        tab[i] = rand() % 75 + 50;

        return tab;
        }

Dobzie, dobzie?

Jak tak to kolejne pytanie:
Jak przekonwertować int na str? Chodzi o to, że w dalszej części programu zwrócone elementy tej tablicy musze wyswietlic w EditBoxie.

Bo rzecz w tym, że używając IntToStr() dostaje taki error:
[BCC32 Error] File1.cpp(48): E2034 Cannot convert 'UnicodeString' to 'char[]'

0

itoa() albo sprintf()

0
Azarien napisał(a)
matek3005 napisał(a)

++++[>+++<-]>[>+++[>+++<-]<-]>>+.>+++[<---->-]<.>++++[<+++++>-]<-.>+++[<----->-]<.++++++.>+++++++[<-------->-]<.---..+++++.

Huh, Brainfuck! Pochwalę się, że napisałem własny interpreter, z optymalizacją i kompilacją JIT – masakrycznie szybki, ale w życiu nie napisałem choćby Hello worlda w tym języku..

bardzo fajny język do zabawy, idealny na nudę :) na hs.spoj.pl było fajne zadanie dotyczące właśnie tego języka, na najkrótszy kod wypisujący wszystkie liczby pierwsze mniejsze od 100. Polecam :)

żeby nie robić OT do autora tematu, co do konwersji zobacz tu
A jeśli chodzi o Twój kod to nie podoba mi się osobiście, powinieneś zwrócić wskaźnik na pierwszy element tablicy, żeby mieć możliwość operowania na niej i jeśli nie zadbasz o zwolnienie pamięci możesz doprowadzić do wycieku.
Pozdrawiam

edit:
Zapomniałbym, srand wywołuje się raz w programie, a nie co każdy obrót pętli, co do tego wskaźnika to faktem jest, że identyfikator tablicy jest wskaźnikiem na jej pierwszy element, lecz Twoja metoda zwraca typ int, a powinna zwrócić int*. Przechowaj sobie rozmiar tablicy w polu w sekcji prywatnej, a w destruktorze pousuwaj dynamicznie utworzoną tablice.

0

Jak już robimy OT nt. brainfucka to wspomnę jako ciekawostkę, że swego czasu na #uw-team na polnecie zrobiliśmy sobie małe compo na napisanie kompilatora brainfucka, z oczywistych względów dla DOS, w asm. Efektem było zejście poniżej bodaj 130 bajtów.

0

Jak zmienie rozmiarTasmy na pole private to mi kompilator sie burzy w tym miejscu:

                bool tablica[x];

z takim errorem:
[BCC32 Error] file2.cpp(12): E2451 Undefined symbol 'x'
A jak w destruktorze usunąć tablice tworzoną w metodzie klasy?

0

Tablice deklarujesz w polach klasy, alokujesz pamięć przy pomocy np new w metodzie, zwalniasz pamięć w destruktorze przy pomocy delete [rozmiar]tablica; albo prościej delete []tablica;

0

No właśnie jak tak robię to mi zwraca taki exception:
http://img696.yfrog.com/img696/1812/beztytuuurj.jpg

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