Stos na klasach
Ostatnio zmodyfikowano 2020-06-30 09:23
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 #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 #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 #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: |
|
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 metodybłąd: "niestatyczne odwołanie do składowej musi być określone względem konkretnego obiektu" |
w main Stack st;
case 1: Stack::push();
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 #include <vector> #include <iostream>
#ifndef STACK_H_INCLUDED #define STACK_H_INCLUDED class 'a ...itd. #endif
|
|
« 1 » |