2016-04-19 3 views
0

Проблема заключается в том, что компилятор (Mingw32) настаивает на том, что в строке 21 в «util.h» имеется ошибка компилятора.Функция C4716 должна возвращать значение, несмотря на возвращение значения

#ifndef UTIL_H 
#define UTIL_H 
#include <string> 
#include <list> 
#include "treeitem.h" 
using namespace std; 

#include <algorithm> 
#include <functional> 
#include <cctype> 
#include <locale> 
#include <QList> 


static inline string &ltrim(string &s){} 
static inline string &rtrim(string &s){} 
static inline string &trim(string &s){} 
static inline string func_1(string txt,size_t start, size_t end){} 
static inline size_t func_2(string txt, size_t index){} 
static inline string replace(string& str, const string& from, const string& to){} 
vector<TreeItem *> parse(string dat){} 

#endif // UTIL_H 

Линия 21 является просто заполнителем для функции в «util.cpp». (Отрывок из util.cpp)

vector<TreeItem *> parse(string dat) 
{ 
    vector<TreeItem *> final {}; 
    while (dat.find("{") <= dat.length()){ 
     TreeItem * temp = new TreeItem; 
     temp->setText(QString::fromStdString(replace(replace(replace(replace(trim(func_1(dat,0,dat.find('{'))),"\n","")," ",""),"}",""),"=",""))); 
     QList<TreeItem *> ref = parse(func_1(dat, dat.find("{")+1,func_2(dat,dat.find('{')))); 

     for(int j = 0; j < ref.size(); j++) 
     { 
      temp->setParent(ref.at(j)); 
      final.push_back(temp); 
      dat = func_1(dat,func_2(dat,dat.find('{')),dat.length()); 
     } 
    } 
    return final; 
} 

Очевидно, что возвращает что-то, так что компилятор не должен давать ошибку. Это не проблема, когда цикл всегда вычисляет true, потому что даже если я перехожу к «return final»; перед циклом он все равно выдает ошибку.

+2

Что это за '{}' делает в файле заголовка ??? – AnT

+0

** ЧТО ОШИБКА КОМПЬЮТЕРА? ** Без этого мы действительно не в состоянии вам помочь. –

+1

@MaxLybbert: Это в названии. –

ответ

2

Проблемы в линиях:

static inline string &ltrim(string &s){} 
static inline string &rtrim(string &s){} 
static inline string &trim(string &s){} 
static inline string func_1(string txt,size_t start, size_t end){} 
static inline size_t func_2(string txt, size_t index){} 
static inline string replace(string& str, const string& from, const string& to){} 
vector<TreeItem *> parse(string dat){} 

Все они обеспечивают пустую реализацию, они не просто декларации. Если вы хотите, чтобы они были просто декларациями, вам необходимо заменить {} на ;.

static inline string &ltrim(string &s); 
static inline string &rtrim(string &s); 
static inline string &trim(string &s); 
static inline string func_1(string txt,size_t start, size_t end); 
static inline size_t func_2(string txt, size_t index); 
static inline string replace(string& str, const string& from, const string& to); 
vector<TreeItem *> parse(string dat); 
+0

Не должно ли функция 'inline' иметь тело, чтобы компилятор мог расширять его, когда он видит использование? – Barmar

+0

@Barmar, функция может быть объявлена ​​встроенной и определена позже. –

2

удалите фигурные скобки в головке. Вы определяете прототипы в заголовке и реализации в исходном файле.

Смежные вопросы