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

Zadanie domowe odcinek 5 C++

Object Storage Arubacloud
0 głosów
819 wizyt
pytanie zadane 21 września 2015 w C i C++ przez niezalogowany

Witam, mam problem z napisaniem Klasy Kula, a dokłądniej z użyciem listy inicjalizacyjnej.

Błądy w MS Visual C++:
Error 1    error C2664: 'Kolo::Kolo(const Kolo &)' : cannot convert argument 2 from 'float' to 'std::string' 
Error 2    IntelliSense: no instance of constructor "Kolo::Kolo" matches the argument list argument types are: (std::string, float)   

Co ceikawe, gdy nie uzywam listy inicjalizacyjnej, a wszystko w klamrze konstruktora jest jak w kodzie, to na ekranie widze obliczoną objętość kuli i jej nazwę.

Kod:
 

#define _USE_MATH_DEFINES
#include <cmath>
#include <iostream>
#include <string>
using namespace std;

class Punkt{
	float x, y;
	string nazwa;
public:
	void wyswietl(){
		cout << nazwa << "(" << x <<", "<< y << ")";
	}
	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;
protected:
	float r;
public:
	void wyswietl(){
		cout << "Kolo " << nazwa << endl;
		cout << "Srodek kola: " << endl;
		Punkt::wyswietl();
		cout << endl << "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{	// klasa Kula dziedziczy publicznie z klasy Kolo
	string nazwa;
public:
	void wyswietl(){
		cout << "Kula " << nazwa << endl;
		cout << "Objetosc kuli = " << 4.0/3.0 * M_PI *pow(r,3) << endl;
	}

	Kula(string nku = "Kuleczka", float pr = 1)
		:Kolo(nku, pr)
	{
		nazwa = nku;
		r = pr;
	}
};

int main(){

//	Kolo k1;
//	k1.wyswietl();

	Kula kula1;
	kula1.wyswietl();

	return 0;
}

 

 

2 odpowiedzi

0 głosów
odpowiedź 21 września 2015 przez Szykem2 Nałogowiec (29,510 p.)
wybrane 21 września 2015
 
Najlepsza

Z tego co widzę to nie problem z listą inicjalizacyjną tylko brakiem odpowiedniego konstruktora. w konstruktorze kuli chcesz wywołać konstruktor Kolo(string, float), a takiego nie masz zdefiniowanego. Masz tylko Kolo(string,string,float,float,float) argumenty domniemane mówią co ma wstawić w przypadku braku tych zmiennych w wywołaniu ale nie można zrobić tak, że nie podajesz jakiegoś w środku, a końcowy tak.

Kolo(string nk="Kolko", string np="S", float a=0, float b=0, float pr=1);

//możesz wywołać Kolo(string) Kolo(string,string) ale nie możesz Kolo(string, float) 
//i tak dalej dodając po jednym floacie. 
//bo kompilator ma problem z konwersją float na string. 
//Tutaj ważna jest kolejność bo też nie wiadomo by było, 
//za którego floata chcesz podstawić tą wartość

W skrócie możesz nie podawać tylko ostatnich argumentów a wszystkie przed nimi muszą zostać podane

komentarz 21 września 2015 przez niezalogowany
Rzeczywiśćie pamietam :D Czyli tutaj w konstruktorze klasy kula mogę użyc tylko pierwszego stringa, bo tu był wskazywany błąd.
dzięki :)
0 głosów
odpowiedź 21 września 2015 przez Dragonet.17 Pasjonat (19,630 p.)
Podpowiem tyle  że powinieneś zwrócić uwagę na konstruktory.
Obczaj sobie jeszcze raz odcinek - nie chce Ci tłumaczyć, ponieważ Pan Mirosław zrobi to lepiej.

Jeżeli stosujesz konstruktor inicjalizujący, to wykorzystuje on kontruktor z klasy bazowej,
W klasie koło "mówisz" żeby pobrał zmienną np,a,b - z klasy punkt. Natomiast w konstr. klasy punkt nie ma zmiennej np - stąd błąd.

Rozgryź to jeszcze :)

Podobne pytania

–1 głos
2 odpowiedzi 423 wizyt
pytanie zadane 23 września 2015 w C i C++ przez Mir000 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 194 wizyt
pytanie zadane 5 marca 2017 w C i C++ przez Dziobakanto Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 203 wizyt
pytanie zadane 3 listopada 2017 w C i C++ przez Fergus Obywatel (1,010 p.)

92,576 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...