Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Lista inicjalizacyjna - no matching function for call to ...

Ostatnio zmodyfikowano 2016-06-02 21:59
Autor Wiadomość
Lich555
Temat założony przez niniejszego użytkownika
Lista inicjalizacyjna - no matching function for call to ...
» 2016-06-02 21:09:44
Witam.
Stworzyłem klasę Point. Później stworzyłem klasę Circle dziedziczącą z Point, a następnie klasę Sphere dziedziczącą z klasy Circle.
Przy tworzeniu listy inicjalizacyjnej w klasie Sphere to wyskakuje mi taki błąd: no matching function for call to 'Circle::Circle(std::__cxx11::string&, float&, float&, float&)
Kod programu:
C/C++
#include <iostream>
#define _USE_MATH_DEFINES
#include <math.h>


using namespace std;

class Point
{
    float x, y;
    string name;
   
public:
    void display()
    {
        cout << name << "(" << x << "," << y << ")" << endl;
    }
    Point( string n = "S", float a = 0, float b = 0 )
    {
        name = n;
        x = a;
        y = b;
    }
};

class Circle
    : public Point //klasa Circle dziedziczy publicznie z klasy Point
{
    string name;
protected:
    float r;
   
public:
    void display()
    {
        cout << "Circle name is: " << name << endl;
        cout << "Circle center: " << endl;
        Point::display();
        cout << "Radius: " << r << endl;
        cout << "Circle area: " << M_PI * r * r << endl;
    }
   
    Circle( string nc = "Circle", string np = "S", float a = 0, float b = 0, float cr = 1 )
        : Point( np, a, b ) //wykorzystanie konstruktora z klasy podstawowej do ustawienia czesci atrybutow
    {
        name = nc;
        r = cr;
    }
};

class Sphere
    : public Circle
{
    string name;
   
public:
    void display()
    {
        Circle::display();
        cout << "Sphere volume: " << 4 / 3 * M_PI * r * r * r;
    }
    Sphere( string ns = "Sphere", string np = "S", float a = 0, float b = 0, float cr = 1 )
        : Circle( np, a, b, cr ) <----Tutaj jest blad !!!
    {
        name = ns;
    }
};

int main()
{
    Sphere s1;
    s1.display();
}
P-148817
pekfos
» 2016-06-02 21:13:13
Circle() przyjmuje 2 stringi, a nie 1.
P-148818
Monika90
» 2016-06-02 21:13:28
C/C++
Circle( string nc = "Circle", string np = "S", float a = 0, float b = 0, float cr = 1 )
Konstruktor oczekuje dwóch stringów

C/C++
: Circle( np, a, b, cr ) <----Tutaj jest blad !!!
A tu przekazujesz mu tylko jeden.



stworzyłem klasę Circle dziedziczącą z Point, a następnie klasę Sphere dziedziczącą z klasy Circle
Dziwny pomysł.
P-148819
Lich555
Temat założony przez niniejszego użytkownika
» 2016-06-02 21:59:07
Dziękuję za odpowiedzi.
@Monika90
Dziwny, nie dziwny. Jest to zadanie z kursu Pana Zelenta (Obiektowy, odcinek 5) mające na celu bardziej zaprezentować pewne możliwości niż być funkcjonalnym, efektywnym programem.
P-148820
« 1 »
  Strona 1 z 1