Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Stos na klasach

Ostatnio zmodyfikowano 2020-06-30 09:23
Autor Wiadomość
BlackPhelipe
Temat założony przez niniejszego użytkownika
Stos na klasach
» 2020-06-30 08:30:21
Mam problem z poniższym kodem, nie jestem wstanie odwołać się z main do metody w klasie a także wykonać operacji na stosie. Proszę o radę co należy poprawić.

błąd:
"niestatyczne odwołanie do składowej musi być określone względem konkretnego obiektu"


STOS2.cpp
C/C++
#include <iostream>
#include <windows.h>
#include "Stack.h"
#include "Stack.cpp"
#include <stack>

int dane[ 5 ];
int rozmiar;

void menu()
{
    system( "CLS" );
    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 14 );
   
    std::cout << std::endl;
    std::cout << "----------------" << std::endl;
    std::cout << "ZAWARTOSC STOSU:" << std::endl;
    std::cout << "----------------" << std::endl;
   
    for( int i = rozmiar; i >= 1; i-- )
    {
        std::cout << dane[ i ] << std::endl;
    }
   
    if( rozmiar == 0 ) std::cout << "pusty" << std::endl;
   
    std::cout << "----------------" << std::endl << std::endl;
    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 15 );
}

int main()
{
   
    int wybor;
    rozmiar = 0;
   
    do
    {
        menu();
       
        std::cout << "MENU GLOWNE STOSU:" << std::endl;
        std::cout << "------------------------------------------" << std::endl;
        std::cout << "1. PUSH (dodaje element na szczyt stosu) " << std::endl;
        std::cout << "2. POP (usuwa element ze szczytu stosu) " << std::endl;
        std::cout << "3. SIZE (ile elementow na stosie) " << std::endl;
        std::cout << "4. EMPTY (czy stos jest pusty?) " << std::endl;
        std::cout << "5. Koniec programu " << std::endl;
        std::cout << "------------------------------------------" << std::endl;
        std::cout << "Wybor: ";
        std::cin >> wybor;
       
       
       
       
        switch( wybor )
        {
        case 1:
            Stack::push();
            break;
           
        case 2:
            Stack::pop();
            break;
           
        case 3:
            Stackksize();
            break;
           
        case 4:
            Stack::empty();
            break;
           
        }
       
    } while( wybor != 5 );
   
    return 0;
}

Stack.h

C/C++
#include <vector>
#include <iostream>

class Stack
{
   
private:
   
    int dane[ 5 ];
    int rozmiar;
   
   
   
public:
   
    std::vector < int > stack;
    void push();
    void pop();
    void size();
    void empty();
   
    Stack operator +( Stack const & s ) const;
    Stack operator -( Stack const & s ) const;
};

Stack.cpp

C/C++
#include "Stack.h"
#include <cmath>
#include <string>
#include <windows.h>

void Stack::push()
{
    if( rozmiar >= 5 )
    {
        std::cout << "Stos pelny!";
        Sleep( 1000 );
    }
    else
    {
        std::cout << std::endl << "PUSH (jaka liczbe polozyc na stosie): ";
       
        rozmiar = rozmiar + 1;
        std::cin >> dane[ rozmiar ];
    }
}

void Stack::pop()
{
    if( rozmiar >= 1 )
    {
        std::cout << std::endl << "POP - nastapi usuniecie ze stosu liczby: " << dane[ rozmiar ];
        Sleep( 2000 );
       
        rozmiar = rozmiar - 1;
    }
    else
    {
        std::cout << "Stos pusty!";
        Sleep( 1000 );
    }


edit: kod został poprawnie zamieszczony na forum, przepraszam za chaos, dopisałem w main "Stack st;" a także w switch zostało zmienione na st.push itd.

Podczas próby kompilacji dostaję takie o to komunikaty:
P-177238
nanoant20
» 2020-06-30 09:23:49
zapoznaj się jak formatować i wstawiać kod na forum Kurs STC

nie jestem wstanie odwołać się z mian do funkcji w klasie a także wykonać operacji na stosie. Proszę o radę co należy poprawić.
Funkcje w klasie, czyli metody

błąd: "niestatyczne odwołanie do składowej musi być określone względem konkretnego obiektu"

w main
C/C++
Stack st; //dopisz

//jest
case 1:
Stack::push();
//powinno byc
case 1:
st.push();

zapoznaj się z Podział kodu na pliki źródłowe
inaczej będziesz dostawał komunikaty typu "multiple definition"


Podczas próby kompilacji dostaję takie o to komunikaty:
Powyżej podałem link Podział kodu na pliki źródłowe
dostajesz blędy m.in. dlatego że
w pliku STOS2.cpp jest #include "Stack.cpp" a nie powinno go tam być
w pliku Stack.h
C/C++
//jest
#include <vector>
#include <iostream>
//tych include'ow nie powinno byc
//zamiast nich powinno byc
#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
class 'a ...itd.
#endif // STACK_H_INCLUDED


P-177240
« 1 »
  Strona 1 z 1