Autor Wątek: Przeładowanie operatora  (Przeczytany 1734 razy)

Offline danielg44k

  • Użytkownik

# Październik 27, 2011, 17:17:31
Witam.

Mamy mały problem. Otóż mam 4 pliki:

- main.cpp
- class.h
- class.cpp
- funkcje.cpp

w class.h znajduje sie deklaracja mojej klasy a w cpp jej ciało.
Wszystko działalo dopóki moj program postanowiłem podzielić na funkcje żeby trzymać jakiś porzadek z kodem.
Funkcja przeładowująca operator nie jest składową klasy i jest wywoływana przez funkcje z funkcje.cpp.
Problem polega na tym że nie działa to. Tzn. przeładowanie operatora nie jest wogole wywolywane i zamiast przeladowania++ mam zwykłe ++.

Nie wiem w którym miejscu tą funkcje przeładowującą umieścić. Próbowałem nawet zmiane z nie-składowej funkcji klasy na składową ale to też mi nie pomogło. Cały problem zaczął sie gdy postanowiłem moj kod porozdzielac na rozne pliki

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline izaw

  • Użytkownik

# Październik 27, 2011, 17:22:28
Zacznij od podania kodu class.h i funkcje.cpp. Teraz to możemy sobie poplotkować.

Offline Liosan

  • Redaktor

# Październik 27, 2011, 17:23:54
Preinkrementacja czy postinkrementacja? Przeładowuje się je na dwa różne sposoby.

Liosan

Offline Esidar

  • Użytkownik

# Październik 27, 2011, 18:10:58
zamiast przeladowania++ mam zwykłe ++.
Uhm, co to znaczy zwykłe "++" ? Jeżeli nie stworzysz własnego operatora ++ dla klasy, to nie ma "defaultowego" operatora który będzie użyty w zamian.

Chyba że się pomyliłeś i używasz operacji ++ na wskaźniku na klasę a nie na obiekcie klasy.

Offline danielg44k

  • Użytkownik

# Październik 27, 2011, 18:23:22
uzywam postinkrementacji na wskazniku.
*wsk++ tutaj dziala postinkrementacja
wsk++ a tu przesuniecie wskaznika tak?

przeladowanie dzialalo mi gdy mialem wszystko w jednym pliku, mam na mysli kod. Teraz gdy porozdzielalem na pliki wypisane w pierwszym poscie nie "lapie" mi funkcji przeladowania operatora
« Ostatnia zmiana: Październik 27, 2011, 18:27:46 wysłana przez danielg44k »

Offline Rydwan

  • Użytkownik

# Październik 27, 2011, 18:32:11
Zgaduje
Przeladowania masz w funkcje.cpp, a w class.cpp nie dolaczyles include "funkcje.cpp".

Offline Xirdus

  • Moderator

# Październik 27, 2011, 18:35:36
Nie includuje się plików .cpp. Musisz wynieść deklaracje funkcji do nagłówka.

Offline danielg44k

  • Użytkownik

# Październik 27, 2011, 18:37:57
przeladowanie mialem juz w kazdym pliku i w zadnym nie dzialalo. Pliki mam dobrze zlinkowane tzn
main ma #include "class.h"
i externy funkcji z funkcje.cpp
class.cpp ma #include class.h
no i funkcje.cpp tez ma #include class.h

a to gdzie mam przeladowanie nie jest istotne bo w zadnym z plikow mi to nie dzialalo
« Ostatnia zmiana: Październik 27, 2011, 18:44:41 wysłana przez danielg44k »

Offline Rydwan

  • Użytkownik

# Październik 27, 2011, 19:15:30
Nie includuje się plików .cpp. Musisz wynieść deklaracje funkcji do nagłówka.
Dziekuje za uswiadomienie. Nie zrozumiales mnie chyba.

Po pierwsze robiac tak, wstawia sie doslownie cialo tego pliku do drugiego.
Po drugie, sa to przeladowania w klasie
Po trzecie extern, nie gwarantuje, ze cos znajdzie takiego. Przy przladowaniach nie bedzie bledu, gdyz uzna gdzies to za zwykly.
Po czwarte, nie zawsze kazde IDE powie nam ze mamy deklaracje bez ciala, a tym bardziej w tym przypadku w programie nie bedzie bledu, jak tez wyzej pisalem.
itd. itp.

@Topic

Wywal te extern i naglowek twojej klasy z funkcje.cpp, gdyz w class.cpp wystarczy. I zrob tak jak napisalem.

Offline danielg44k

  • Użytkownik

# Październik 27, 2011, 19:24:59
a skad funkcje.cpp ma wiedziec o tym ze klasa wogole istnieje? skoro niczego nie "includuje"

Offline Rydwan

  • Użytkownik

# Październik 27, 2011, 19:36:57
Nie, gdyz robiac, tak jak pisalem efekt koncowy bedzie taki, ze wszystko co jest w funkcje.cpp kopilator wytnie i wklei tam gdzie jest include "funkcje.cpp".

Offline danielg44k

  • Użytkownik

# Październik 27, 2011, 19:43:28
teraz nie chce sie skompilowac wypisujac bledy takie jak:

missing type specifier - int assumed. Note: C++ does not support default-int
syntax error : missing ';' before '*' - chociaz niema takiego bledu wiec nie wiem o co chodzi...
'int CKomora' : redefinition

Offline Rydwan

  • Użytkownik

# Październik 27, 2011, 19:59:16
To znaczy, co znaczy. Czyli redefinicja. Bez kodu tyle wiadomo i mozna tylko zgadywac.

Masz cos nakrecone z naglowkami. Dodatkowo mozliwe, ze w class.h definiujesz jakies stale poza funkcja.
W class.h zadnych wlasnych naglowkow.
W funkcje.cpp zadnych naglowkow doslownie.
W class.cpp najpierw dolaczasz class.h, potem funkcje.cpp i nic wiecej.

Offline danielg44k

  • Użytkownik

# Październik 27, 2011, 20:23:43
znalazlem blad dlaczego nie dzialalo mi przeladowanie. Tylko nie rozumiem dlaczego wczesniej dzialalo.

ladnie przeladowanie dziala mi gdy uzywam

++(*wsk);

a gdy

*wsk++ juz nie.

Tylko dlaczego wczesniej mi to dzialalo.
Wczoraj o tym czytalem w symfoni i teraz mi to przyszlo do glowy zeby to wyprobowac aczkolwiek wczesniej dzialala mi druga forma z niewiadomych przyczyn a teraz nie dziala. so?

Offline Esidar

  • Użytkownik

# Październik 27, 2011, 20:44:50
*wsk++ juz nie.
bo tutaj zwiększasz wskaźnik. Nie wywołujesz ++ na obiekcie. Zamień na (*wsk)++.