Przedefiniowanie operatorow

Odpowiedz Nowy wątek
2014-12-26 19:14
0

Witam ,

Mam drobny problem , napisałem kalkulator na duzych liczbach , takich które nie mieszczą sie w normalny zakres np 100! ,ten kalkulator działą bez zarzutu ale zajmijmy sie dodawaniem jest to funkcja która pobiera 2 stringi i zwraca string wynikowy , definicja jest w pliku dodawanie.cpp ,jest tez plik dodawanie.h z deklaracja , posiadalem plik main.cpp gdzie miałem switcha by user mógł wybierać operacje ale postanowiłem przedefiniować operatory np operator dodawania , wiec usunełem main.cpp i stworzyłem main1.cpp , mam także pliki DuzaLiczba.h i DużaLiczba.cpp próbuje przedefinować operatory za pomocą funkcji dodawania , przeczytałem że mozną zrobić to przez metode klasy wiec do klasy dodałem deklaracje funkcji dodawania , na dole udostępniam kod . Mam pytanie czy wgl dobrze sie za to zabrałem , funkcja dodawania dziala dobrze ale nie mogę jej prawidłowy przedefiniować ciągle są problemy w chwili obecnej

C:\Users\Damianek\Desktop\Próba_definiowania_operatorow\x000x\main1.o   main1.cpp:(.text+0xe2): undefined reference to `DuzaLiczba::operator+(DuzaLiczba const&) const' 

Czy ma ktoś pomysł?

Plik main1cpp

     DuzaLiczba liczba1;
 
  DuzaLiczba liczba3("1234567890087554545454656543");
    DuzaLiczba liczba2("999999999999999999999999999999");
 
  l2 = l2+l3;
 
system("pause");
return 0;
}
 

plik DuzaLiczba.h

 class DuzaLiczba{
     string wartosc;
 
   public:
 
        DuzaLiczba();
 
       DuzaLiczba(string value) 
 
       {wartosc=value;
        }
        string dodawanie(string liczba1, string liczba2);
        DuzaLiczba operator+(const DuzaLiczba&) ;
 
};

Plik DuzaLiczba.cpp

 DuzaLiczba::DuzaLiczba()
{
   wartosc="0";
}
 
inline DuzaLiczba DuzaLiczba::operator+(const DuzaLiczba& n)  {
     return dodawanie(wartosc,n.wartosc);
     }

Pozostało 580 znaków

2014-12-26 22:23
1
DuzaLiczba operator+(const DuzaLiczba&)const;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-27 11:18
0

Po poprawieniu na const jak napisales mam blad

 17 35  Duza_liczba.cpp [Error] passing 'const DuzaLiczba' as 'this' argument of 'std::string DuzaLiczba::dodawanie(std::string, std::string)' discards qualifiers [-fpermissive]

i podkresla linijke DuzaLiczba DuzaLiczba:: operator+(const DuzaLiczba& n)const {
dodawanie(wartosc,n.wartosc); <---------- tutaj bład
}



Jakby argumenty byly niepoprawne

Poszukałem że to moze byc poblem ze wywoluje nie const metode/funkcje w funkcji const ale dodanie const do funkcji dodawania nic nie zmienilo...
edytowany 1x, ostatnio: murek1993, 2014-12-27 11:29

Pozostało 580 znaków

2014-12-27 11:25
0
static string dodawanie(string liczba1, string liczba2);

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-27 11:33
0

Niestety dodanie słowa static albo const przy deklaracji i definicji dodawania nic nie dalo...ten sam bład

Pozostało 580 znaków

2014-12-27 11:49
0

Więc podaj cały kod.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-27 11:55
0
#include <stdio.h>
#include <iostream>
#include <string>
 
using namespace std;
 
class DuzaLiczba
{
       string wartosc;
 
       string dodawanie(string liczba1, string liczba2) const { return "WYNIK"; } 
       //tutaj trzeba zmienić na faktyczne dodawanie na stringach
 
   public:
       DuzaLiczba():wartosc("0") { }
 
       DuzaLiczba(string value):wartosc(value) { }
 
       DuzaLiczba operator+(const DuzaLiczba& n) const { return DuzaLiczba(dodawanie(wartosc, n.wartosc)); }
 
       friend ostream & operator<< (ostream &out, const DuzaLiczba &n) { out << n.wartosc << endl; return out;}
};
 
int main()
{
    DuzaLiczba liczba3("1234567890087554545454656543");
    DuzaLiczba liczba2("999999999999999999999999999999");
 
    liczba2 = liczba2+liczba3;
 
    cout << liczba2;
 
    return 0;
}
edytowany 8x, ostatnio: mateusz2813, 2014-12-27 12:11

Pozostało 580 znaków

2014-12-27 12:03
1

Pewnie czytasz odpowiedzi na kilku forach i jednocześnie stosujesz.

  1. string dodawanie(string liczba1, string liczba2) const { return "WYNIK"; }
    • skompiluje się i będzie działać ale to bubel projektowy
  2. static string dodawanie(string liczba1, string liczba2) const { return "WYNIK"; }
    • kolizja klauzul, nie może być jednocześnie static i const
  3. static string dodawanie(string liczba1, string liczba2) { return "WYNIK"; }
    • poprawne rozwiązanie, jedynie warto wrzucić do sekcji private

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Faktycznie, masz rację. Umknęło mi, że dodawanie(string, string) nie działa na żadnym obiekcie DuzaLiczba, więc najlepiej static. ;) - mateusz2813 2014-12-27 12:19

Pozostało 580 znaków

2014-12-27 12:36
0

Dobrze wiec pozmieniałem tak jak kod powyzej uzyłem static jak sami zasugerowaliscie , nie rozumiem tylko o co chodzilo

//tutaj trzeba zmienić na faktyczne dodawanie na stringach 

w te miejsce nie wklejałem definicji dodawania tam jest tylko deklaracja mam includa na plik dodawanie.h a faktyczna definicja jest w pliku dodawanie.cpp wiec powinno dzialac , po tych zmianach mam taki blad Duza_liczba.o Duza_liczba.cpp:(.text+0xc0): undefined reference to `DuzaLiczba::dodawanie(std::string, std::string)'


  dopisalem static w pliku dodawanie.h , dodawanie.cpp i DuzaLiczba.h  , bład wyglada jakby nie widzial kompilator dodawania

Pozostało 580 znaków

2014-12-27 12:38
0

Podaj kod lub pytaj do wróżbitów.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2014-12-27 12:42
0

czego dokladnie kod chcesz? podalem własciwie wszystko

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0