У меня есть класс «Предложение», в котором # включает «Слово».Тип возвращаемого значения функции класса не определен
Sentence - это связанный список слов.
Мои государства назначения, которые я должен перегружать «оператор +», так что
Sentence s = "dog jumped.";
Word w = "The";
W+s; //should return a new sentence that says "The dog jumped high."
Имейте в виду, что я должен перегружать оператор +. Это то, что я оцениваю на
Однако, поскольку предложение Sentence содержит Word, его еще не определено. Я получаю сообщение об ошибке
return type 'class Sentence' is incomplete
и неправильного использования неполного типа «сопзИте класс приговоре»
вот моего код перегрузки
class Sentence; //forward declaration
Sentence Word::operator+(const Sentence &sentence) const{
Sentence *s = new Sentence(sentence.getCopy()); //make a new sentence that's a copy of the parameter
Word *w = new Word;
Sentence::node *l = new Sentence::node; //make new linked list node
(*(l->w)) = (*w); //Set word of node
l->next = (*s).getFirs(); // set new node to point to first node of the sentence object
(*s).setFirs(l); // point first pointer to the new node
return *s;
}
Я также попытался отдельным способом перегрузки оператору за пределами класса, которому это понравилось
Sentence operator+(const Word &word, const Sentence &sentence);
Который вызвал ошибки, заявляя, что он определен несколько раз
вы пытаетесь вернуть тип, только вперед заявленный. Представьте, что вы являетесь компилятором, пользователь говорит, что где-то в будущем будет класс Sentance, поэтому вы знаете только одно, а затем он пытается вернуть его экземпляр. Вы не знаете, что такое размер, так сколько места выделять для временного и такого.Вам придется разбить этот код так, чтобы оператор + находился в таком месте, где могут быть определены определения как предложения, так и слова. – Creris
Определение этого оператора вне класса - это способ пойти в этом случае, возможно, благодаря объявлениям друзей или служебным функциям. Почему это не сработало? Я не знаю, вы, должно быть, допустили ошибку, но нельзя сказать, не глядя на код (конечно, с минимальным примером). –
Вы, кажется, уже несколько дней публиковали этот же код и до сих пор не исправили основную проблему, в которой вы помещаете определения классов для «Word» и «Sentence». Исправьте это сначала, а затем все остальные проблемы исчезнут. –