Я получаю предупреждение: управление достигает конца функции, не являющейся пустой

#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 но, если утверждение ложно, программа может выйти из строя. Потому что функции нечего возвращать, но ожидается, что она что-то вернет.
простое исправление: убедитесь, что функция всегда возвращает некоторое значение