尽管返回值,C4716函数必须返回一个值

时间:2016-04-19 21:20:50

标签: c++ qt

问题是编译器(Mingw32)坚持在“util.h”的第21行有一个更复杂的错误。

#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 个答案:

答案 0 :(得分:3)

删除标题中的大括号。您可以在标头和源文件中的实现中定义原型。

答案 1 :(得分:3)

问题在于:

[[1 2 3]
 [4 5 6]
 [7 8 9]]
15

所有这些都提供了一个空的实现,它们不仅仅是声明。如果您希望它们只是声明,则需要将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){} 替换为{}

;