Tablica w konstruktorze.

0

Witam, czemu ten kod nie działa poprawnie? Chciałem zrobić dokładnie jak w Javie, w sensie deklaruję na początku tablicę bez rozmiaru, a potem dopiero w konstruktorze podaję jej rozmiar. Czy mogę jakimś sposobem zrobić to samo w c++?

#include "WierszTrojkataPascala.h"


WierszTrojkataPascala::WierszTrojkataPascala(int n)
{
     tab = new int[n+1];
     for(int x=0; x<n+1; x++)
     {
         tab[x] = Newton(n,x);
     }
}

Wspolczynnik(int m)
{
    return tab[m];
}

---poniżej plik .h----

class WierszTrojkataPascala
{
    public:
        WierszTrojkataPascala(int n);
        int Wspolczynnik(int m);
        int Newton(int a, int b);
        int tab[];

    protected:

    private:

};
2

Użyj std::vector. W C++ rozmiar tablicy musi być znany w czasie kompilacji.

class WierszTrojkataPascala
{
    public:
        WierszTrojkataPascala(int n);
        int Wspolczynnik(int m);
        int Newton(int a, int b);
        int tab[];

    protected:

    private:

};


WierszTrojkataPascala::WierszTrojkataPascala(int n) : tab(n+1)
{
     for(int x=0; x<n+1; x++)
     {
         tab[x] = Newton(n,x);
     }
}

Wspolczynnik(int m)
{
    return tab[m];
}
1
#include <iostream>
#include <vector>
using namespace std;

struct newton {
	newton(int, int){}
};

struct foo {
	vector<newton> tab;
	
	foo(int n) {
		for(int i = 0; i < n; ++i) {
			tab.emplace_back(n, i);
		}
	}
};

int main() {
	foo whatever {4};
	cout << whatever.tab.size();
	return 0;
}
0

Obecnie mam coś takiego, w metodzie Współczynnik nie widzi mi tej tablicy, swoją drogą tak nie do końca wiem, co robię :D W internecie widziałem że to tak jakby rozszerza tablicę, lecz zupełnie inaczej niż niż dopisane przy konstruktorze " : tab(n+1)"

#include "WierszTrojkataPascala.h"

WierszTrojkataPascala::WierszTrojkataPascala(int n) : tab(n+1)
{
     for(int x=0; x<n+1; x++)
     {
         tab[x] = Newton(n,x);
     }
}

Wspolczynnik(int m)
{
    return tab[m];
}

--

#include <vector>

class WierszTrojkataPascala
{
    public:
        WierszTrojkataPascala(int n);
        int Wspolczynnik(int m);
        int Newton(int a, int b);
        std::vector <int> tab;

    protected:

    private:

};
1

Bo Wspolczynnik jest zdefiniowany jako wolna funkcja, a nie element klasy.

int WierszTrojkataPascala::Wspolczynnik(int m)
//  ^^^^^^^^^^^^^^^^^^^^^
{
    return tab[m];
}

edit: u Ciebie w ogóle nie jest zdefiniowany jako cokolwiek; definicja i deklaracja funkcji wymaga zwracanego typu lub placeholdera typu

0

Teraz mam coś takiego, ale metoda Newton mi nie działa:

#include "WierszTrojkataPascala.h"

WierszTrojkataPascala::WierszTrojkataPascala(int n) : tab(n+1)
{
     for(int x=0; x<n+1; x++)
     {
         tab[x] = Newton(n,x);
     }
}

int WierszTrojkataPascala::Wspolczynnik(int m)
{
    return tab[m];
}

int WierszTrojkataPascala::Newton(int a, int b)
{

int multiplier = 1;

		if(a>b)
		{
			for(int x=a, y=0; y<b; x--, y++)
				multiplier *= x;

			for(int x=2; x <= b; x++)
				multiplier /= x;

			return multiplier;
		}
		else if(a == b)
			return 1;
		else
			return 0;
}

---

#include <vector>

class WierszTrojkataPascala
{
    public:
        WierszTrojkataPascala(int n);
        int Wspolczynnik(int m);
        int Newton(int a, int b);
        std::vector <int> tab;

    protected:

    private:

};
3

Nic dziwnego, jej ciało to trzy kropki.

0

Już nie chciałem dawać kodu tego, bo wydaje mi się że jest niepotrzebny tutaj, ale zedytuję i pokażę

1

Nie wiem co rozumiesz przez "nie działa", ale pewnie wychodzisz podczas mnożenia poza zakres inta.

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