Paragraph operator+(const Sentence& sent);
Это говорит оператор такого, что добавление двух Sentence
сек результатов в Paragraph
.
paragraph.sentence = this->sentence + paraSentence;
Правая часть задания использует оператор сверху, так что вы пытаетесь Ассинг в Paragraph
к Sentence
, как если бы вы написали:
Paragraph additionResult = this->sentence + paraSentence;
paragraph.sentence = additionResult;
Проблема заключается в том, что у вас есть не определено присвоение от Paragraph
в Sentence
. Вы можете просто добавить его в Sentence
, конечно:
Sentence& operator=(const Paragraph& para);
Но как бы вы реализовать его? Может ли абзац логически быть преобразован в одно предложение? Это решение не будет работать.
Альтернативное решение состоит в изменении соответствующего operator+
в Sentence
, чтобы возвращать Sentence
, а не пункт:
class Sentence {
public:
Sentence();
~Sentence();
void show();
Sentence operator+(const Sentence& sent); // <-- now returns a Sentence
Paragraph operator+(const Paragraph& paragraph);
Sentence operator+(const Word& word);
Word word;
};
При добавлении двух Sentence
сек Возвращает Sentence
, то результат сложения может также быть назначен до Sentence
, поскольку назначение копии из того же типа автоматически генерируется компилятором (если вы явно не указали delete
).
Но это представляет собой свою долю проблем, потому что как два предложения логически могут быть объединены в один?
реальная проблема, вероятно, может быть найдено в этой строке:
Sentence sentence; // Sentence in Paragraph
Ваше определение класса эффективно говорит о том, что пункт всегда состоит ровно из одной фразы. Это не может быть правильно. Членная переменная должна иметь тип std::vector<Sentence>
, чтобы выразить намерение, что один абзац состоит из от 0 до n предложений. После того как вы изменили переменную-член, перепишите все реализации операторов, чтобы учесть новую ситуацию.
Конечно, у вас такая же проблема в Sentence
(и я думаю, что и в других классах).
Как правило, проверьте свои книги/учебные пособия и просмотрите главу о перегрузке оператора. Вы не следуете лучшим практикам. Например, вы должны определить +
в терминах +=
. И, конечно, важный вопрос заключается в том, действительно ли операционная перегрузка является полезной здесь или нет.
_ «вы можете предположить, что все мои классы определены правильно» _ Если бы это было правдой, у вас не было бы ошибки ... –
Имеет ли класс «Sentence» конструктор копирования или перегруженный оператор '=' ? – yizzlez
Какая проблема? Мы не видим никакого подходящего кода. Представьте [минимальный тест] (http://stackoverflow.com/help/mcve), с которым вы отлаживали проблему в течение последних нескольких дней. –