我正在尝试实现以下子例程。
string& sortAndMerge(string &u, int start, int end){
if(end>=0){
int mid=(start+end)/2;
if(start<end){
sortAndMerge(u,start,mid);
sortAndMerge(u,mid+1,end);
return merge(u,start,mid,end);
}
}
return;
}
该函数被称为sortAndMerge(s,0,s.length() - 1),这里s是一个字符串。由于第3个参数最终可能是负数,我需要子程序来忽略这些情况。
我收到以下错误: -
return-statement with no value, in function returning ‘std::string& {aka std::basic_string<char>&}’ [-fpermissive].
我有两个问题 1)有没有办法可以从具有除void之外的返回类型的函数中返回任何内容 2)什么时候可以使用return关键字,没有任何内容或NULL。
答案 0 :(得分:7)
1)有没有办法可以从具有除void之外的返回类型的函数中返回任何内容。
没有。如果您希望自己的计划有效,请不要这样做。
2)什么时候可以使用return关键字什么都不是NULL。
您只能在返回类型为return
的函数中使用void
关键字。您可以在任何具有指针(非引用)类型的函数中将return
关键字与NULL
一起用作其返回类型。
根据NULL
的定义方式,我想您也可以从NULL
作为返回类型的函数返回int
,但返回0会更有意义。
答案 1 :(得分:4)
你不能这样做,因为你的功能声明为
string& sortAndMerge(string &u, int start, int end)
您希望函数调用者返回字符串引用。所以所有调用者都期望并等待获取字符串引用。所以编译器不允许打破这样的承诺(规则)。
您必须返回您的承诺或重新定义函数以返回其他数据类型。如果您需要返回不同的内容,可以考虑Enum
,Union
或其他一些事情。除此之外,您可以抛出异常退出函数而不返回任何内容。但它不认为是正确的函数执行。
答案 2 :(得分:0)
您始终可以将bool用作返回类型
bool do(int& tryInt, int s, int e)
{
if(s>5 || e<0)
return false;
tryInt= s + e;
return true;
}
int main()
{
int tryInt = 0;
int myInt = do(tryInt,6,4)? tryInt : 0;
}
编辑:对不起,我什么时候没有看到它:/