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

Problem z konstruktorem i prośba o wytłumaczenie.

0 głosów
112 wizyt
pytanie zadane 17 października 2015 w C i C++ przez użytkownika Szahid Stary wyjadacz (12,650 punkty)
edycja 17 października 2015 przez użytkownika Szahid

Mam problem z konstruktorem w klasie Kula. Kompilator wywala mi - 

error: no matching function for call to 'Kolo::Kolo(std::string&, float&, float&, float&)'|

 

#include <iostream>
#include <math.h>

using namespace std;

class Punkt
{
   float x,y;
   string nazwa;

public:
   void wyswietl()
   {
      cout<<nazwa<<"("<<x<<","<<y<<")"<<endl;
   }
   Punkt(string n="S", float a=0, float b=0)
   {
      nazwa = n;
      x = a;
      y = b;
   }
};

class Kolo :public Punkt //klasa Kolo dziedziczy publicznie z klasy Punkt
{

   string nazwa;

public:
    float r;
   void wyswietl()
   {
      cout<<"Kolo o nazwie: "<<nazwa<<endl;
      cout<<"Srodek kola: "<<endl;
      Punkt::wyswietl();
      cout<<"Promien: "<<r<<endl;
      cout<<"Pole kola : "<<M_PI*r*r<<endl;
   }

   Kolo(string nk="Kolko", string np="S", float a=0, float b=0, float pr=1)
   :Punkt(np,a,b)
   {
      nazwa = nk;
      r = pr;
   }
};

//////////////////////////////////////////////
class Kula : public Kolo
{
    string nazwa;
    public:
  Kula(string nku="Kulka",string sro="S",float a=0, float b=0, float p=0)
  :Kolo(sro,a,b,p)
  {
      nazwa=nku;
  }


};

int main()
{

Kula k1;
    return 0;
}

 

Korzystając z okazji mam pytanie

Jak ma zrobić inicjalizację konstruktora jeśli chce wyuskać tylko niektóre dane?

 

2 odpowiedzi

+1 głos
odpowiedź 17 października 2015 przez użytkownika Radfler Szeryf (93,640 punkty)
wybrane 17 października 2015 przez użytkownika Szahid
 
Najlepsza
Konstruktor klasy Kula jest błędny. Argumenty domniemane definiujemy "od lewej", tz. jeżeli jakiś argument funkcji jest domniemany, to wszystkie argumenty na prawo też muszą być domniemane.

Ostatniego pytania zbytnio nie rozumiem. Może chodzi Ci o przeładowanie konstruktora? Tz. wiele konstrukorów z różnymi parametrami? :)
komentarz 17 października 2015 przez użytkownika Radfler Szeryf (93,640 punkty)
komentarz 17 października 2015 przez użytkownika Szahid Stary wyjadacz (12,650 punkty)
Co mam rozumieć przez słowo domniemany.
komentarz 17 października 2015 przez użytkownika adrian17 Szeryf (78,720 punkty)
Błędy kompilatora sprowadzają się do: tylko ostatnie argumenty mogą mieć wartości domyślne. Domniemany == domyślny.
komentarz 17 października 2015 przez użytkownika Radfler Szeryf (93,640 punkty)

Argument domyślny np.

Kula(int i = 0); // Argument domniemany: "argument = wartość_domniemana"

Kula(int i); // Brak argumentu domniemanego
komentarz 17 października 2015 przez użytkownika Patrycjerz VIP (135,740 punkty)

A ja dorzucę coś po polsku: http://guidecpp.cal.pl/cplus,functions.

komentarz 17 października 2015 przez użytkownika Szahid Stary wyjadacz (12,650 punkty)
Poprawiłem wszystko z Twoimi zaleceniami i wróciłem do punktu wyjścia z przed dwóch godzin :) . Co prawda błędów w tym miejscu wywaliło mniej ale nadal są ;/
+1 głos
odpowiedź 17 października 2015 przez użytkownika Patrycjerz VIP (135,740 punkty)

A popatrz na deklaracje konstruktora klasy Kolo - ma on pięć argumentów, a w konstruktorze klasy Kula wywołujesz tylko cztery... nie wiem, czy nie ma większej ilości błędów, ale widać, jak sprawdziłeś kod przed napisaniem tematu na forum.

komentarz 17 października 2015 przez użytkownika Szahid Stary wyjadacz (12,650 punkty)
Siedze przy tym kodzie od rana. Poprostu nie do końca ogarniam temat. Wywołuje 4 bo nazwa z klasy koło nie jest mi potrzebna gdyż kula będzie miała inną nazwe. Masz może pomysł jak rozwiązać ten problem.
komentarz 17 października 2015 przez użytkownika Patrycjerz VIP (135,740 punkty)
Tak jak kolega napisał, argumenty domniemane w konstruktorze muszą być na końcu, czyli za nimi nie może być argument zwykły.
komentarz 17 października 2015 przez użytkownika Szahid Stary wyjadacz (12,650 punkty)
Poprawione. I nadal lipa (kod w pytaniu również poprawiłem)
komentarz 17 października 2015 przez użytkownika Szahid Stary wyjadacz (12,650 punkty)
Ok jeszcze jedną zmiane wprowadziłem i śmiga. Dziękuje.

Podobne pytania

0 głosów
2 odpowiedzi 98 wizyt
pytanie zadane 30 września 2015 w Java przez użytkownika Damianoo4444 Bywalec (2,720 punkty)
0 głosów
2 odpowiedzi 86 wizyt
pytanie zadane 24 sierpnia 2015 w C i C++ przez użytkownika niezalogowany
0 głosów
1 odpowiedź 94 wizyt
pytanie zadane 9 stycznia w C i C++ przez użytkownika czujek22 Gaduła (4,290 punkty)
...