• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

was not declared in this scope

Object Storage Arubacloud
0 głosów
762 wizyt
pytanie zadane 8 sierpnia 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)

main.cpp

#include <iostream>
#include "result.h"
using namespace std;

int main()
{
    Result r(0,0);
    r.gatherWxPx();
    r.addition();
    return 0;
}

result.h

#include <iostream>

using namespace std;

class Result
{
private:

    int dWx; //degree of polynomial W(x)
    int dPx; //degree of polynomial P(x)
    int RWxPx;

public:

    void gatherWxPx(); //gathering polynomial W(x) from user
    Result(int, int);
    ~Result();

    void addition(); //adding polynomials
    void subtraction(); //subtracting polynomials
    void multiplication(); //multiplying polynomials
    void division(); //dividing polynomials
};

gather.cpp

#include <iostream>
#include "result.h"

using namespace std;

void Result::gatherWxPx()
{
    cout<<"Input degree of polynomial W(x): ";
    cin>>dWx;
    while (dWx<=0)
    {
        cout<<"Degree of polynomial has to be greater than 0, try again: ";
        cin>>dWx;
    }
    int HelperWx=dWx;

    cout<<"Input degree of polynomial P(x): ";
    cin>>dPx;
    while (dPx<=0)
    {
        cout<<"Degree of polynomial has to be greater than 0, try again: ";
        cin>>dPx;
    }
    int HelperPx=dPx;

    float *cWx;                  //
    cWx = new float [dWx+1];     //dynamically allocating arrays for W(x)

    cout<<"Input coefficients and constant of polynomial W(x): ";
    cout<<endl;

    for (int i=dWx; i>=0; i--)
    {
        cin>>cWx[i];     //gathering coefficients of W(x)
    }

    cout<<"W(x)= ";              //show W(x)
    for (int i=dWx; i>=0; i--)
    {
        if (cWx[i]>0 && i!=HelperWx)
        {
            cout<<"+";
        }
        if ((cWx[i]<0 && i==0 && i==dWx) || cWx[i]==-1)
        {
            cout<<"-";
        }
        if (cWx[i]!=0)
        {
            if ((cWx[i]!=1 && cWx[i]!=-1) || i==0)
            {
                cout<<cWx[i];
            }
            if (i!=0)
            {
                cout<<"x";
            }
            if (i!=0 && i!=1)
            {
                cout<<i;
            }
        }
        else if (cWx[i]==0)
        {
            HelperWx--;
        }
        if (i<=0 && HelperWx==-1)
        {
            cout<<"0";
        }
    }

    cout<<endl;

   // delete [] cWx;

    float *cPx;               //
    cPx = new float [dPx+1];  //dynamically allocating arrays for P(x)
                              //

    cout<<"Input coefficients and constant of polynomial P(x): ";
    cout<<endl;

    for (int i=dPx; i>=0; i--)
    {
        cin>>cPx[i];      //gathering coefficients of P(x)
    }

    cout<<"P(x)= ";             //show P(x)
    for (int i=dPx; i>=0; i--)
    {
        if (cPx[i]>0 && i!=HelperPx)
        {
            cout<<"+";
        }
        if ((cPx[i]<0 && i==0 && i==dPx) || cPx[i]==-1)
        {
            cout<<"-";
        }
        if (cPx[i]!=0)
        {
            if ((cPx[i]!=1 && cPx[i]!=-1) || i==0)
            {
                cout<<cPx[i];
            }
            if (i!=0)
            {
                cout<<"x";
            }
            if (i!=0 && i!=1)
            {
                cout<<i;
            }
        }
        else if (cPx[i]==0)
        {
            HelperPx--;
        }
        if (i<=0 && HelperPx==-1)
        {
            cout<<"0";
        }
    }
    cout<<endl;
   // delete [] cPx;
}



Result::Result(int Wx, int Px)
{
    dWx=Wx;
    dPx=Px;
}

Result::~Result()
{
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}

addition.cpp

#include <iostream>
#include "result.h"

using namespace std;

void Result::addition()
{

    if (dWx>dPx)
    {
        RWxPx=dWx;
        float *AWxPx;
        AWxPx = new float [RWxPx+1];

        for (int i=dWx; i>dPx; i--)
        {
            AWxPx[i]=cWx[i];
        }
        for (int i=dWx; i>dPx; i--)
        {
            cout<<AWxPx[i];
            cout<<" ";
        }
    }
    else if (dWx<dPx)
    {
        RWxPx=dPx;
        float *AWxPx;
        AWxPx = new float [RWxPx+1];
    }

}

Chodzi glownie o plik addition.cpp, mam tam cWx was not declared in this scope, wiem, że go w tej petli nie ma ale jak zrobic to tak ze komputer odczyta cWx[] ktore wczesniej wprowadzil uzytkownik ale jest w innym pliku no i nie w tej petli albo warunku sam nie wiem? 

Poza tym czy moj zamysl jest dobry:

main:

1.Wywoluje konstruktor klasy Result

2.Wywoluje gatherWxPx w celu pobrania od uzytkownika potrzebnych danych

3.robie Switcha w ktorym sa wszystkie operacje do wyboru (dodawanie, odejmowanie, mnozenie, dzielenie)

4.Wywoluje destruktor ktory niszczy wszystkie dynamicznie zaalokowane tablice

Nie moge znalezc odpowiedzi na to pytanie bo na filmie Miroslawa Zelenta tam ten destruktor nic nie robil i byl wywolany przed innymi funkcjami a ja bede mial w innych funkcjach zaalokowane dynamicznie jeszcze kilka tablic i sie zastanawiam gdzie go umiescic.

 

1
komentarz 8 sierpnia 2020 przez jankustosz1 Nałogowiec (35,880 p.)
Nie rozumiem o co Ci chodzi. cWx to zmienna lokalna w funkcji gatherWxPx. Nie masz dostępu do niej w innej funkcji.
komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
ok czyli musze ja uczynic globalna, czyli dac ja do pliku result.h tak? Tylko ze ona jest dynamiczna, ma taki rozmiar jaki poda uzytkownik, jak to ogarnac w takim razie? Bo z tego co wiem to wiem to nie podaje sie tego w pliku header.  Czy mozna zaprzyjazniac ze soba dwie funkcje? Pytam bo taki pomysl mi sie w glowie narodzil ale nie wiem jak to dokladnie dziala, jeszcze malo umiem.
1
komentarz 8 sierpnia 2020 przez jankustosz1 Nałogowiec (35,880 p.)
Chcesz mieć do niej dostęp w obrębie metod danej klasy to zrób ją składową klasy
komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
składowa klasy czyli ze jest wewnatrz tej klasy tak jak dWx dPx oraz RWxPx tak?

Jezeli tak to jak to ogarnac bo ona ma za kazdym razem inny rozmiar, zalezy to od uzytkownika, w jaki sposob to zapisac skoro nie powinno sie przypisywac wartosci w pliku header?
komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
a no i moglbys prosze odpowiedziec czy moge zaprzyjaznic ze soba dwie funkcje w taki sposob ze zaprzyjaznilbym addition() z gatherWxPx dzieki czemu addition mialoby dostep do cWx??? Czy to w ogole w ten sposob dziala?
1
komentarz 8 sierpnia 2020 przez jankustosz1 Nałogowiec (35,880 p.)
cWx jest wskaźnikiem i ma zawsze stały rozmiar. Tak, zrób tak samo jak z tymi zmiennymi co wymieniłeś.
komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
Jak to staly rozmiar :o? Przeciez zalezy on od dWx ktory wpisuje uzytkownik, moze sie roznic za kazdym razem. Co omijam? Ok mam zrobic tak samo jak te inne ale jak to zapisac skoro cWx to dynamicznie zaalokowane tablice. Czy moge przyjaznic funkcje z funkcja i dzieki czemu uzyskac dostep do cWx w addition()?
1
komentarz 8 sierpnia 2020 przez jankustosz1 Nałogowiec (35,880 p.)
Po co chcesz coś zaprzyjaźniać? To jedna i ta sama klasa.

Obszar pamięci na który wskaźnik wskazuje się zmienia, ale adres który wskaźnik przechowuje ma zawsze ten sam rozmiar. Możesz użyć sizeof żeby to sprawdzić.
komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)

chodzi mi o to ze za kazdym razem ma inna liczbe tablic, jak uzytkownik poda dWx=5 to mam 6 tablic jak dWx=2 to mam 3 talibce itd. ok czyli mam zrobic cWx oraz cPx tak samo jak dWx dPx oraz RWxPx, ale moje pytanie brzmi jak to zrobic skoro to ma byc dynamicznie zalokowane, jak to zapisac no bo dla np dWx zapisuje sobie int dWx bo to tylko 1 wartosc zawsze a jak to zapisac dla cWx?

class Result
{
private:

    int dWx; //degree of polynomial W(x)
    int dPx; //degree of polynomial P(x)
    int RWxPx;

    float *cWx;                  
    cWx = new float [dWx+1];

     float *cPx;                  
    cWx = new float [dPx+1];

w ten sposob??? Wydaje mi sie ze to zle bo mialem nie inicjowac tego w tym pliku

komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
czy np w konstruktorze to zrobic???
1
komentarz 8 sierpnia 2020 przez jankustosz1 Nałogowiec (35,880 p.)
tam przypisujesz gdzie potrzebujesz przypisać, możesz zmieniać wartość(to na co wskazuje wskaźnik) wielokrotnie.
komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
a ok, ale gdzies musze to pierwszy raz zapisac, jak zapisalem to w funkcji gatherWxPx to stalo sie to niedostepne dla innych funkcji, wiec wnioskuje ze musze to zrobic w result.h, ale jak to zapisac, jezeli nie chce od razu przypisywac ile ma miec tablic tylko dopiero w funkcji gatherWxPx.
1
komentarz 8 sierpnia 2020 przez jankustosz1 Nałogowiec (35,880 p.)
No tak samo jak z trzema innymi składowymi. w result.h tylko deklarujesz, że takie coś w tej klasie istnieje, a używasz w metodach. Jak zrobisz this-> IDE powinno podpowiedzieć ci różne nazwy składowych twojej klasy.
komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
dalej nie wiem jak to dokladnie zrobic, moglbys prosze wstawic przykladowy kod bo to serio zaoszczeci duzo czasu i niedopowiedzen, jak mam zadeklarowac tablice w ktorej nie podaje ile ma elementow a dopiero potem to robie? Po prostu nie wiem jak to sie robi, czy to sie pisze float cWx[]; albo nie wiem float cWx; ???? po prostu nie wiem prosze o odpowiedz.
komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
class Result
{
private:

    int dWx; //degree of polynomial W(x)
    int dPx; //degree of polynomial P(x)
    int RWxPx;
    float cWx[];
    float cPx[];

czy taki zapis jest poprawny i sensowny?

1
komentarz 8 sierpnia 2020 przez jankustosz1 Nałogowiec (35,880 p.)

Nie. Założę się że nie Ty pisałeś ten kod który wysłałeś w pytaniu. Przecież tam jest wszystko zrobione wystarczy tylko wyciąć i wkleić. 

Powinno być:

class Result
{
private:
 
    int dWx; //degree of polynomial W(x)
    int dPx; //degree of polynomial P(x)
    int RWxPx;
    float *cWx;
    float *cPx;

i pousuwaj lokalne deklaracje tych wskaźników w funkcjach, bo teraz są klasowe.

komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
co do tego czy ja to pisalem to tak ja, wracam po przerwie i w sumie to nigdy w zyciu nie pisalem obiektowo, dziekuje bardzo za pomoc probowalem tam samo jak ty tylko z kwadratowymi nawiasami i nie wychodzilo, dzieki raz jeszcze
komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)

@jankustosz1, a jeszcze jedno, czy taki zarys programu na sens:

1.wywolanie konstruktora (w ogole wydaje mi sie bezuzyteczny ale kazali robic)

2.wywolanie gatherWxPx 

3.Switch z 4 operacjami (dodawanie, odejmowanie, mnozenie i dzielenie)

4.Destruktor (zniszczenie wszystkich dynamicznie zaalokowanych tablic)

Pytam bo nie wiem czy moge tak zrobic ze zniszcze je w destruktorze po przeleceniu calego programu, ale w sumie bez sensu byloby usuwac cWx i cPx przed wykonaniem w ogole jakiejs operacji, i zreszta chyba niemozliwe tak?

komentarz 8 sierpnia 2020 przez jankustosz1 Nałogowiec (35,880 p.)
1) Konstruktor przyjmujący te 2 argumenty wymusza by je podać, jest to dobre lub złe, zależnie od sytuacji. Z tego co mi się wydaje to i tak te zmienne nadpisujesz w gatherWxPx, więc nie ma to zbytniego sensu.

2) Ja bym tak tego nie robił. W sensie lepiej oddzielić logikę od pobierania danych od użytkownika. Wypisywanie i wczytywanie danych powinno być gdzie indziej, ta metoda powinna przyjmować dane jako argumenty i zwracać wyniki. Przydała być się klasa Wielomian w której już metoda wczytująca miała by sens.

3) Kodu nie powinno się powtarzać, a chyba powtórzyłeś wczytywanie wielomianu.

4) Nie widzę, byś te tablice usuwał. Btw. pierwsze sprawdź czy wogóle były stworzone, bo funkcja w której się tworzą może nie zostać wywołana.
komentarz 8 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
1)Czyli wywalic konsturktor? A moze funkcje gatherWxPx dac jako konstruktor?

2)Nie rozumiem ;/

3)Gdzie?

4)Tzn w gather.cpp mam to w komentarzach bo wlasnie sie zastanawialem

No i program nie jest skonczony, duzo jest niedopisane, dlatego pytam jak to zrobic najoptymalniej

Dzieki za cala pomoc ja na dzisiaj koncze, odczytam pewnie jutro i wroce do pisania
1
komentarz 8 sierpnia 2020 przez jankustosz1 Nałogowiec (35,880 p.)
0) Klasa o nazwie Result wiele nie mówi w tym przypadku.

1, 2), 4) Hmmm. Pierwsze zrób klasę Polynomial która będzie posiadała tablicę współczynników(oczywiście z destruktorem, no chyba, że użyjesz std::vector) z metodą do wczytania wielomianu oraz jego wypisania. Następnie zależnie co chcesz mieć w tej klasie możesz zmienić nazwę z Result na PolynomialsUtility, gdzie będzie metoda przyjmująca dwa wielomiany i zwracająca na ich podstawie jakiś wynik. Wtedy oddzielisz też narzędzie do wielomianów od operacji na konsoli i będziesz mógł tego użyć np w aplikacji okienkowej.

3) gatherWxPx - Wczytujesz i wypisujesz wielomian P i W dokładnie w ten sam sposób, czemu więc nie jest to w jakieś pomocniczej funkcji.
komentarz 9 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)

3)Nie do konca bo dla Wx mam petle od dWx do 0 a w Px mam petle od dPx do 0, ogolnie moglbym w sumie nazwac inaczej te wielomiany np polynomial1 i polynomial2 i wtedy w petli od 1 do 2 umiescic to wyswietlanie w taki sposob:

for (int i=1; i>=2; i++)
{
for (int j=polynomial+i; j>=0; j--)   //nie wiem jak sie robi konkatenacje w c++
}

ale wtedy chyba bym nie dal rady tego zrobic zeby wyswietilo mi sie najpierw W(x)=to co wyjdzie z pierwszej iteracji a potem P(x)=to co wyjdzie z drugiej iteracji

124) 1 klasa Polynomial dla 2 wielomianow czy osobno? Czy jak dam destruktor to on mi nie skasuje wprowadzonych danych przed jakas operacja? W klasie polynomialUtilities mialbym 4 metody: dodawanie, odejmowanie, mnozenie i dzielenie, a nie mialbym zadnych atrybutow, mozna tak?

"Wtedy oddzielisz też narzędzie do wielomianów od operacji na konsoli i będziesz mógł tego użyć np w aplikacji okienkowej." - Tego nie rozumiem

 

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

–1 głos
1 odpowiedź 629 wizyt
pytanie zadane 23 sierpnia 2020 w C i C++ przez Drożdżówka Obywatel (1,870 p.)
0 głosów
2 odpowiedzi 518 wizyt
pytanie zadane 4 maja 2020 w C i C++ przez kwazi Nowicjusz (120 p.)
0 głosów
1 odpowiedź 667 wizyt
pytanie zadane 23 października 2019 w C i C++ przez darekdede1995 Nowicjusz (180 p.)

92,556 zapytań

141,403 odpowiedzi

319,559 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...