Loading...
TsenoBorislavovTsenov avatar TsenoBorislavovTsenov 0 Точки

Task 2 - Aggregators

Здравейте!

Защо ми дава error attempting to reference a deleted function в този код(Става дума за 2ра задача от 8мо домашно) : 

 

#ifndef SUMAGGREGATOR_H
#define SUMAGGREGATOR_H

#include "Aggregator.h"
#include <sstream>

class SumAggregator : public StreamAggregator
{
public:
	SumAggregator(std::istream stream) : StreamAggregator(stream)
	{
		//....
	}
};

#endif // !AGGREGATOR_H

Това е base class:

#ifndef AGGREGATOR_H
#define AGGREGATOR_H

#include <istream>

class StreamAggregator {
private:
	std::istream& stream;
	int numAggregated;
protected:
	int aggregationResult;

	virtual void aggregate(int next) {
		this->numAggregated++;
	}
public:
	StreamAggregator(std::istream& stream) : stream(stream), numAggregated(0) {}

	int aggregate() {
		int next;
		while (this->stream >> next) {
			this->aggregate(next);
		}

		return this->getAggregationResult();
	}

	int getAggregationResult() const {
		return this->aggregationResult;
	}

	int getNumAggregated() const {
		return this->numAggregated;
	}

	virtual ~StreamAggregator() {}
};

#endif // !AGGREGATOR_H


 

Тагове:
0
C++ Advanced
j.petrov_90 avatar j.petrov_90 373 Точки
Best Answer

Привет,

В случая конструкторът ти:
SumAggregator(std::istream stream) : StreamAggregator(stream) {}
Счупва build-а.

Би трябвало да е:
SumAggregator(std::istream & stream) : StreamAggregator(stream) {}
и build-а е ОК.

Какво направих - ами предадох std::istream-а по референция.
Ти волно или неволно не си го направил.
А твоята версия не работи, защото copy constructor-а на std::ifstream е delete-нат по стандарт.
Това е така, защото обекта от тип std::istream спазва правилото на нулата.

За повече информация:
http://www.cplusplus.com/reference/istream/istream/istream/

По-здрави

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.