redeklaracja metod z .h w .cpp ?

redeklaracja metod z .h w .cpp ?
KA
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:30
0

Piszę pierwszy program w c++, plik nagłówkowy i .cpp zrobiłem analogicznie do tego co było na wykładzie, ale mimo to Visual w którym pisze podkreśla mi błędy przy każdej metodzie i pisze :
function Zespolona::(nazwa f.) may not be redeclared outside its class

Byłbym wdzięczny za wytłumaczenie dlaczego jest źle i jak zrobić żeby było poprawnie

cały plik .h

Kopiuj
class Zespolona{

    private:
        double re;
        double im;
    public:
        Zespolona::Zespolona(double real,double img);

        Zespolona add(Zespolona &);

        Zespolona sub(Zespolona &);

        Zespolona mul(Zespolona &);

        Zespolona div(Zespolona &);

        void print();

        ~Zespolona();
};

fragment .cpp

Kopiuj
#include "Zespolona.h"
#include<iostream>


    Zespolona::Zespolona(double real,double img){    
        re=real;
        im=img;
    }

    Zespolona Zespolona::add(Zespolona & x);
    {
        return Zespolona(re+x.re ,im+x.im);
    }

//pozostałe instr. analogicznie do add

    Zespolona::~Zespolona(){}

dodanie znaczników <code class="cpp"> - fp

edytowany 2x, ostatnio: flowCRANE
hauleth
Użyj listy inicalizacyjnej zamiast przypisań w konstruktorze.
N9
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 11 lat
  • Postów:20
0

Zwróć uwagę jak masz zadeklarowany konstruktor klasy. Fragment

Kopiuj
Zespolona::

jest niewłaściwy.


Nowość na polskich drogach - 'Autobus przebugowy' - mq
Shalom
WTF? Jest jak najbardziej właściwy.
Shalom
Ach mea culpa, nie zauważyłem że on w deklaracji wewnątrz ciała klasy tak gdzieś napisał ;) Myślałem ze pisałes o kwalifikatorze przy definicji metod.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2

Masz średnik i przed nawiasem klamrowym.

Kopiuj
Zespolona Zespolona::add(Zespolona & x); //tego średnika nie moze tu być
{
//bla bla
}

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
KA
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:30
0

Dziękuje za pomoc. Próbowałem sam ,,naprawić" wersję z wykładu ale się nie udało.

Mam jeszcze pytanie odnośnie wskazówki którą dostałem:
czy tak powinien wyglądać ten konstruktor z listą inicjalizacyjną

Kopiuj
Zespolona::Zespolona(double real,double img): re(real), im(img) {}

?

_13th_Dragon
Tak, z tym że można nawet tak: Zespolona::Zespolona(double re,double im):re(re),im(im) {}
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 5 godzin
0

czy tak powinien wyglądać ten konstruktor z listą inicjalizacyjną
Wygląda ok.

Nie widzę sensu, by pola klasy Zespolona były prywatne.
Uzasadnienie: pola publiczne są potrzebne, by łatwo dostać się do części rzeczywistej i zespolonej liczby. Nigdy nie będzie ani więcej ani mniej pól w tej klasie, bo nie byłaby to już liczba zespolona. Ani nie potrzebujesz żadnego kodu do ustawiania ani pobierania tych pól.

KA
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:30
0

mam pewne zalecenia których mam się trzymać pisząc w c++ i zapewne jak zrobię pola typu public to polecą za to pkt-y

na szczęście w tym programie nie mam żadnego problemu z dostępem do tych pól

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
0

Jeżeli prowadzący zna się na rzeczy to za prywatne pola w liczbie zespolonej punkty polecą. Jak potrzebujesz jakichś składowych prywatnych to zrób to w klasie testującej.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Endrju
Jak by się znał, to by wiedział o std::complex. ;-)
_13th_Dragon
Możliwe że wie, tylko że chce czemuś nauczyć tych .........

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.