#include "rec_fun.h"
using namespace mry2270;
void triangle(ostream& outs, unsigned int m, unsigned int n){
if (m <= n){
for (int i = 0; i < m; i++){
cout<<"*";
}
cout<< endl;
triangle(outs, ++m, n);
}
else if (m > n && n >= 0) {
for (int i = 0; i < n; i++){
cout<<"*";
}
cout<< endl;
triangle(outs, m, --n);
}
}
void numbers(ostream& outs, const string& prefix, unsigned int levels){
}
bool bears(int n){
return 0;
}
int main(int argc, const char * argv[]) {
return 0;
}
#ifndef rec_fun_h
#define rec_fun_h
#include <iostream>
#include <string>
using namespace std;
// void triangle(ostream& outs, unsigned int m, unsigned int n)
// Precondition: m <= n
// Postcondition: The function has printed a pattern of 2*(n-m+1) lines
// to the output stream outs. The first line contains m asterisks, the next
// line contains m+1 asterisks, and so on up to a line with n asterisks.
// Then the pattern is repeated backwards, going n back down to m.
/* Example output:
triangle(cout, 3, 5) will print this to cout:
***
****
*****
*****
****
***
*/
//
// bool bears(int n)
// Postcondition: A true return value means that it is possible to win
// the bear game by starting with n bears. A false return value means that
// it is not possible to win the bear game by starting with n bears.
// Examples:
// bear(250) is true (as shown above)
// bear(42) is true
// bear(84) is true
// bear(53) is false
// bear(41) is false
//
// bool bears(int n)
// Postcondition: A true return value means that it is possible to win
// the bear game by starting with n bears. A false return value means that
// it is not possible to win the bear game by starting with n bears.
// Examples:
// bear(250) is true (as shown above)
// bear(42) is true
// bear(84) is true
// bear(53) is false
// bear(41) is false
namespace mry2270 {
void triangle(ostream& outs, unsigned int m, unsigned int n);
void numbers(ostream& outs, const string& prefix, unsigned int levels);
bool bears(int n);
}
我正在处理一个递归类并不断收到此错误。知道怎么解决吗?
编辑:这是main.cpp文件
我认为潜在的问题可能在.h文件下,但我不确定。
编辑:我添加了.h文件,并在递归调用中更新了我的参数。我仍然得到“调用'三角形'是模糊的”错误,我现在得到一个“无符号表达式比较&gt; = 0总是为真”错误。
答案 0 :(得分:0)
为了使此代码触发您提到的错误,必须有一个单独的.selector-wrap {
margin: 5px 0 0 0;
width: 100%;
border: 1px solid;
display: flex;
justify-content: space-evenly;
> div {
display: flex;
align-items: center;
justify-content: center;
flex: 1;
&.flex-zero {
flex: 0;
visibility: hidden;
&:hover {
visibility: visible;
//here
how to make seperator hidden?
}
}
}
}
声明与您在代码中提供的定义冲突 - 例如,具有不同参数类型的前向声明。 / p>
您的代码的真正问题是它会导致堆栈溢出。仔细看看这个调用:
triangle
你知道为什么电话通过triangle(outs, m++, n);
triangle
和m
的确切值?如果你说&#34;后增量,&#34;你得到了一个金星作为答案:电话应该使用n
来解决这个问题;同样,其他调用中的m+1
应更改为n--
。
此外,您的代码中没有退出递归的路径,因为两个分支最终无条件地调用n-1
。您应该将triangle
的检查添加为零,并在减法后添加一个返回值(当然,它不能为负值,因为它是n
,但您的程序会打印unsigned
溢出后会出现大量不需要的星号。
答案 1 :(得分:0)
致电&#39;三角&#39;是不明确的错误
不,你的n
并不含糊,至少从你的例子开始。
但是,triangle
有自己的(两个)问题 - 没有终止来停止递归,错误地使用triangle
和operator++
如下:
operator--
答案 2 :(得分:0)
在标题中,有一个前向声明
namespace mry2270 {
void triangle(ostream& outs, unsigned int m, unsigned int n);
...
}
承诺在某处存在函数mry2270::triangle
。
cpp文件定义了一个名为triangle
的函数。
void triangle(ostream& outs, int m, int n){
请注意名称的不同之处。 triangle
不是mry2270::triangle
,违反了标头所做的承诺。通常情况下,当链接器寻找mry2270::triangle
的实现时,它会被捕获。
如果事情变得奇怪,using namespace mry2270;
允许mry2270::triangle
被称为triangle
。已有triangle
,导致编译器报告歧义。
可以通过将命名空间添加到triangle
的实现来解决。替换
void triangle(ostream& outs, unsigned int m, unsigned int n) {
与
void mry2270::triangle(ostream& outs, unsigned int m, unsigned int n) {
通过整理,您可以继续整理其他答案指出的其余错误。