簡體   English   中英

C4716函數必須返回一個值,盡管返回了一個值

[英]C4716 function must return a value thown despite returning a value

問題是編譯器(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”; 在循環之前,它仍然會引發錯誤。

刪除標題中的括號。 您可以在標頭中定義原型,並在源文件中定義實現。

問題在於:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM