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

no appropriate default constructor available

0 głosów
886 wizyt
pytanie zadane 15 października 2016 w C i C++ przez timrh Mądrala (6,010 p.)
The default constructor of "IAssingable" cannot be referenced -- it is a deleted function   
IAssingable::IAssingable(void)': attempting to reference a deleted function   

Layer.cpp

Layer::Layer(sf::Color background_color = sf::Color::White)
{
	this->background_color = background_color;
}

IAssingable.cpp

void IAssingable::SetLayer(Layer new_layer)  //błąd
{
	this->my_layer = new_layer;
}

Button.cpp
//klasa button dziedziczy miedzy innymi z klasy IAssingable, zmienną my_layer ma od niej

Button::Button(sf::Vector2f position,
			   sf::Vector2f size,
	           std::string button_value, 
	           sf::Color text_color, 
	           sf::Color normal_color, 
	           sf::Color pressed_color,
			   Layer my_layer) //Błąd
{
	this->position = position;
	this->size = size;
	this->button_value = button_value;
	this->button_color = normal_color;
	this->text_color = text_color;
	this->active_background_color = pressed_color;
	this->normal_background_color = normal_color;
	this->ID = buttons.size() > 0 ? buttons.size() : 0;
	this->my_layer = my_layer;

	//SendToMenu(*this);

	buttons.push_back(*this);
}

Lista inicjalizacyjna w moim przypadku nie chce działać. Pomocy!

 

1 odpowiedź

0 głosów
odpowiedź 15 października 2016 przez criss Mędrzec (172,570 p.)
wybrane 15 października 2016 przez timrh
 
Najlepsza

Nie wkleiłeś kluczowego fragmentu kodu, ale podejrzewam, że IAssingable nie ma konstruktora bezargumenowego. Wystarczy, że go dopiszesz. Ew. wykorzystasz = default jeśli nie chcesz (nie potrzebujesz) sam pisać konstruktora:

IAssingable() = default;

Btw.: nie assingable, tylko assignable. Masz literówke.

Jeśli to nie pomaga, to wrzuć tu kod IAssingable, bo teraz tak troche strzelam.

komentarz 15 października 2016 przez timrh Mądrala (6,010 p.)

Przy SetLayer() był jakiś błąd ale dałem domyslną wartość i juz nie ma.

Klasa Button:

.h

#ifndef BUTTON_H
#define BUTTON_H
#include <vector>
#include "SFML\Graphics.hpp"

#include "IObject.h"
#include "IVisual.h"
#include "IColorable.h"
#include "IAssingable.h"

#include "ButtonEvent.h"

//struct IObject;

class Button : public IObject, public IVisual, public IColorable, public IAssingable
{
private:
	std::string button_value;
	sf::Color button_color;
	sf::Color text_color;
public:
	std::vector<ButtonEvent> button_events;

	std::string GetButtonValue();

	sf::Color GetTextColor();

	//play effects after pressing button
	void PlayEvent();

	void AddEvent(ButtonEvent button_event);

	Button(sf::Vector2f position, 
		   sf::Vector2f size,
		   std::string button_value, 
		   sf::Color text_color, 
		   sf::Color normal_color, 
		   sf::Color pressed_color,
		   Layer my_layer
		   );

	void SetColor(bool clicked);

};

Button & GetButton(int index);

int GetButtonsVectorSize();
#endif 

.cpp

#include "Button.h"
#include <iostream>

std::vector<Button> buttons;

std::string Button::GetButtonValue()
{
	return button_value;
}

sf::Color Button::GetTextColor()
{
	return text_color;
}

//play effects after pressig button
void Button::PlayEvent()
{

	for (int i = 0; i < button_events.size(); i++)
	{
		//cout << "ok - sended from button with id: " << this->ID << "\n";
		if (button_events[i].CheckConditions())
		{
			button_events[i].StartEffect();
		}
	}
}

void Button::AddEvent(ButtonEvent button_event)
{
	button_events.push_back(button_event);
	//std::cout << "adding item to vector, actual vector size is: " << button_events.size() << "\n";
}

Button::Button(sf::Vector2f position,
			   sf::Vector2f size,
	           std::string button_value, 
	           sf::Color text_color, 
	           sf::Color normal_color, 
	           sf::Color pressed_color,
			   Layer my_layer)
{
	this->position = position;
	this->size = size;
	this->button_value = button_value;
	this->button_color = normal_color;
	this->text_color = text_color;
	this->active_background_color = pressed_color;
	this->normal_background_color = normal_color;
	this->ID = buttons.size() > 0 ? buttons.size() : 0;
	this->my_layer = my_layer;

	//SendToMenu(*this);

	buttons.push_back(*this);
}

void Button::SetColor(bool clicked)
{
	button_color = clicked ? active_background_color : normal_background_color;
}

Button & GetButton(int index)
{
	return buttons[index];
}

int GetButtonsVectorSize()
{
	return buttons.size();
}

 

komentarz 15 października 2016 przez criss Mędrzec (172,570 p.)
Stwórz klasie Layer domyślny konstruktor ( = default). Ew. nadanie domyślnych wartości argumentom w obecnym konstruktorze powinno też pomóc.
komentarz 15 października 2016 przez timrh Mądrala (6,010 p.)
Pisałem kilka odpowiedzi wyżej zawartość konstruktora Layer i są tam domyślne wartości..
komentarz 15 października 2016 przez criss Mędrzec (172,570 p.)

Faktycznie.. To spróbuj stworzyć domyślny. Jak jesteś bardzo zdesperowany, to wrzuć te 3 klasy na gista i dokładnie wymień w jakiej linijce jaki błąd, bo najwyraźniej za mało kodu widze.

komentarz 15 października 2016 przez timrh Mądrala (6,010 p.)
Dobra już sobie poradziłem, usunąłem domyślne konstruktory i dałem tylko w klasie Layer bez żadnych parametrów. Tak czy siak dzięki.

Podobne pytania

0 głosów
2 odpowiedzi 1,412 wizyt
pytanie zadane 22 kwietnia 2016 w C i C++ przez kkkk Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 579 wizyt
pytanie zadane 15 kwietnia 2017 w C i C++ przez m_rij_v Użytkownik (660 p.)

93,605 zapytań

142,530 odpowiedzi

322,999 komentarzy

63,095 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

Kursy INF.02 i INF.03
...