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

no appropriate default constructor available

VPS Starter Arubacloud
0 głosów
417 wizyt
pytanie zadane 15 października 2016 w C i C++ przez timrh Mądrala (6,030 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,590 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,030 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,590 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,030 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,590 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,030 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 974 wizyt
pytanie zadane 22 kwietnia 2016 w C i C++ przez kkkk Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 235 wizyt
pytanie zadane 15 kwietnia 2017 w C i C++ przez m_rij_v Użytkownik (660 p.)

92,454 zapytań

141,262 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...