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

Jak dostać się do argumentu funkcji

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
704 wizyt
pytanie zadane 11 marca 2016 w C i C++ przez szawel Nowicjusz (180 p.)

Próbuje przerobić mój stary projekt(kalkulator RPN,oparty na stosie) tak, żeby używał klas.  Napotkałem jednak problem.

Na screenach jest plik .h i ciało funkcji,która nie działa i reszty funkcji. Nie wiem dlaczego, ale w funkcji cos, wyświetla błąd o deklaracji stos. Bardzo proszę o pomoc.

 

4 odpowiedzi

+2 głosów
odpowiedź 11 marca 2016 przez pingwindyktator Użytkownik (520 p.)
Z tego co widać (a widać niewiele, co to za głupi pomysł wrzucania screenów :| ), to nie masz nigdzie zmiennej stos. I nie, nie zadeklarowałeś jej "w pliku .h". "w pliku .h" masz po pierwsze DEFINICJE KLASY, po drugie nazywa się Stos, a nie stos.

Poza tym - to nie jest C++. To C z klasami. Powinieneś dostać po łbie za ten kod.
0 głosów
odpowiedź 11 marca 2016 przez Pascal Bywalec (2,720 p.)
nigdzie nie deklarujesz zmiennej stos
komentarz 11 marca 2016 przez szawel Nowicjusz (180 p.)
Zadeklarowalem w pliku .h.
komentarz 12 marca 2016 przez Pascal Bywalec (2,720 p.)
owszem zadeklarowałeś ale tylko strukturę a nie zmienną jej typu
0 głosów
odpowiedź 11 marca 2016 przez szawel Nowicjusz (180 p.)

No dobra przyznam sie, ze troche nie rozumiem. No kod niestety jest w c, bo tak mnie naucyzli na studiach ;(. przechodzac jednak do programu w wczesniejszych funkcjach uzywalem stos i dziala. Wydaje mi sie, ze to tu jest zadeklarowana zmienna stos.

struct Stos {
  double stos[MAX_SIZE];
  int rozmiar;
};

Dalej nie za bardzo wiem co mam z tym zrobic.
Wrzucam kod nie w screenach.

to plik .h

/* maksymalna ilosc elementow na stosie */
#define MAX_SIZE 10
class dzialanie{
	public:
		double a,b,c,d;
	void cos();
	};

struct Stos {
  double stos[MAX_SIZE];
  int rozmiar;
};

/* Zwraca ilosc elementow znajdujacych sie na stosie */
int size(struct Stos *stos);

void push(double liczba, struct Stos *stos);

double pop(struct Stos *stos);

void print(struct Stos *stos);
	

a to .cpp

#include <cstdio>
#include <cstdlib>
#include "kalkul.h"


void push(double liczba, struct Stos *stos) {
	if (stos->rozmiar <MAX_SIZE) {
		stos->stos[stos->rozmiar] = liczba;
		stos->rozmiar++;
		}
	else {
		printf("stos pelny\n");
	}

}

double pop(struct Stos *stos) {
	if (stos->rozmiar > 0) {
		stos->rozmiar--;
		return stos->stos[stos->rozmiar];
		
	}
	else {
		printf("stos pusty\n");
	}
	}

void print(struct Stos *stos) {

	int i;
	if (stos->rozmiar == 0)
	{
		printf("Stos jest pusty\n");
		
	}
	else
	{
		printf("Na stosie znajduje sie \n");
		for (i = stos->rozmiar-1; i >= 0; i--)
		{
			printf("%lf\n", stos->stos[i]);
			
		}
		
	}
	
}

int size(struct Stos *stos) {
  return stos->rozmiar;
}
void dzialanie::cos(){
		 a = pop(&stos);
		 b = pop(&stos);
		 c = b - a;
		printf("Wynik:");
		printf("%lf\n", c);
		push(c, &stos);
		
}

 

0 głosów
odpowiedź 11 marca 2016 przez draghan VIP (106,230 p.)

Przypomnę Ci deklarację Twojej klasy:

class dzialanie{
    public:
        double a,b,c,d;
    void cos();
    };

Plus jeszcze definicja metody dzialanie::cos():

void dzialanie::cos(){
         a = pop(&stos); // ??
         b = pop(&stos); // ??
         c = b - a;
        printf("Wynik:");
        printf("%lf\n", c);
        push(c, &stos); // ??
         
}

Rozumiem, że kompilator nie przepuszcza tych linii, tak? Nie masz zdefiniowanej globalnej zmiennej o identyfikatorze 'stos', a klasa dzialanie również nie posiada takiej składowej - stąd protest kompilatora. Przynajmniej tak mi się wydaje, bo trochę namieszałeś z tymi screenami. ;)

I owszem - kod trochę... Nieładny, jeśli chodzi o styl. Ale dobrze, że się próbujesz rozwijać. :)

komentarz 11 marca 2016 przez szawel Nowicjusz (180 p.)
Dobra rozumiem już, gdzie lezy problem. Czyli wystarczy ze zdefiniuje stos globalnie lub dodam do skladowych klasy?
komentarz 11 marca 2016 przez draghan VIP (106,230 p.)
...lub przekażesz jako argument metody.

Podobne pytania

0 głosów
1 odpowiedź 143 wizyt
pytanie zadane 4 kwietnia 2017 w Inne języki przez Milesq Nałogowiec (32,020 p.)
0 głosów
1 odpowiedź 380 wizyt
0 głosów
2 odpowiedzi 123 wizyt
pytanie zadane 16 listopada 2020 w C i C++ przez arccx Nowicjusz (210 p.)

93,440 zapytań

142,431 odpowiedzi

322,678 komentarzy

62,802 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

...