#c
Вопрос:
Моя программа, кажется, отлично работает в visual studio, но когда я запускаю ее в GCC, она выдает ошибку компиляции под названием
Book.cpp: In member function ‘sdds::Bookamp; sdds::Book::addChapter(const char*, int)’:
Book.cpp:64:5: warning: control reaches end of non-void function [-Wreturn-type]
}
^
и я не знаю, что делать, может кто-нибудь, пожалуйста, помочь?
Это была функция, в которой я получаю ошибку в
Bookamp; addChapter(const char* chapter_name, int noOfPages)
{
// create a new chapter
Chapter chapter(chapter_name, noOfPages);
// check if chapter is valid
if (chapter.isValidChapter()) {
// add the chapter to list of chapters
// create a new list of chapters
Chapter* chapters = new Chapter[this->noOfChapters 1];
// copy chapters to new array
for (int i = 0; i < this->noOfChapters; i )
chapters[i] = this->chapters[i];
// add the last chapter
chapters[this->noOfChapters ] = chapter;
// delete the old list of chapters
delete this->chapters;
// update the list of chapters
this->chapters = chapters;
return *this;
}
}
Комментарии:
1. Ваша функция говорит, что она возвращает a
Book amp;
в подписи, но вы ничего не возвращаете в фактическом определении. Даже после вашего редактирования сейчас он все равно ничего не возвращает, если!chapter.isValidChapter()
.2. @mediocrevegetable1 что я должен вернуть?
3. Я предполагаю , что это ошибка, если
!chapter.isValidChapter()
, поэтому попробуйте вернуть что-то, указывающее на ошибку. В этом случае вам нужно вернуть ссылку, поэтому, возможно, у вас есть известный глобальный объект, который должен указывать на ошибку и возвращать ее, когда она есть?4. что вы имеете в виду, возвращая что-то, что указывает на ошибку?
5.
return *this
Нужно ли просто находиться вне оператора if?
Ответ №1:
Предупреждение означает, что функция: addChapter
ожидает некоторого возвращаемого значения.
Конечно, у вас есть один возврат, If statment
но, если утверждение ложно, программа может выйти из строя. Потому что функции нечего возвращать, но ожидается, что она что-то вернет.
простое исправление: убедитесь, что функция всегда возвращает некоторое значение