我正在使用递归进行家庭作业,我的productfz
函数将拒绝与我合作。 Visual Studio告诉我,当我在main中调用它时,我需要在'first'变量周围使用括号。我只在我的主参数中的每个变量之前添加了'unsigned',因为它消除了错误消息。但是,该功能甚至不会执行。我不会在运行代码中收到“tester”消息。
我在这里做错了什么?
#include <iostream>
using namespace std;
unsigned productfz();
unsigned productfz(unsigned a, unsigned b)
{
//nothing for now
cout << "this is a tester" << endl;
return a;
}
int main()
{
unsigned int first = 7;
unsigned b = 4;
unsigned productfz(unsigned first, unsigned b);
return 0;
}
答案 0 :(得分:2)
在您的main()
中,您没有正确地使用productfz行:
unsigned productfz(unsigned first, unsigned b);
是函数decleration而不是函数调用。
如果你想调用该函数,只需写:
productfz(first,b);
答案 1 :(得分:1)
你实际上并没有调用你的函数,你只是在main
内声明一个原型 - 更改:
unsigned productfz(unsigned first, unsigned b);
为:
productfz(first, b);
答案 2 :(得分:1)
将函数传递给函数时,不需要指定变量的数据类型。调用它时,也不需要指定方法的返回数据类型。
此代码应该有效:
#include <iostream>
using namespace std;
unsigned productfz();
unsigned productfz(unsigned a, unsigned b)
{
//nothing for now
cout << "this is a tester" << endl;
return a;
}
int main()
{
unsigned int first = 7;
unsigned b = 4;
productfz(first, b);
return 0;
}
答案 3 :(得分:1)
进行以下更改(同样,格式化/对齐的代码更易于理解和调试):
unsigned productfz(unsigned a, unsigned b)
{
//nothing for now
int a; // you are returning this variable but you have not defined/used it
cout << "this is a tester" << endl;
return a;
}
int main()
{
unsigned int first = 7;
unsigned b = 4;
productfz(first, b); //just write the variable names
return 0;
}
答案 4 :(得分:1)
最初发布的代码:
#include <iostream>
using namespace std;
unsigned productfz();
unsigned productfz(unsigned a, unsigned b)
{
//nothing for now
cout << "this is a tester" << endl;
return a;
}
int main()
{
unsigned int first = 7;
unsigned b = 4;
unsigned productfz(unsigned first, unsigned b);
return 0;
}
固定&amp;清理代码:
#include <iostream>
using namespace std;
int productfz( int const a, int const b)
{
//nothing for now
cout << "this is a tester" << endl;
return a;
}
int main()
{
productfz( 7, 4 );
}
,其中
productfz
的前瞻性声明已被删除
前瞻性声明
只是意味着在更改时必须更新两个地方而不是一个
制作,并且他们可以在向前声明时引入微妙的错误
实施得出同步。
unsigned
类型已被int
取代
C ++保证了和提供的无符号类型的模运算
隐式转换从签名类型到相应的无符号,何时
这两种语言混合在一起。这意味着如果是无符号类型
如果使用表示数字,则可能会无意中使用模块
算术。例如,string("haha").length() < -5
始终为true
,
因为很久以前(当它有意义时)有一个命运多mar的决定
用无符号整数类型表示。
正式的论点是const
大多数人都同意自由地撒上const
是个好主意。
在任何地方都这样做是可行的,因为这限制了
可能的数据交互路径,使代码更容易推理
关于并理解。但是,很少有人将const
放在普通值参数上。
我这样做,因为同样的理由适用于它们,例如:局部变量。
main
中用作参数名称的变量已被删除
对于一个参数很少的简单函数,它并没有真正阐明
任何命名实际参数的东西。相反,增加了
冗长可能会产生相反的效果,模糊不清。仍然,作为一个
一般来说,只要看到所有可见的东西,这是一个好主意,
所以当有疑问时,请为此命名。
main
中功能的重新声明已被呼叫取代。
函数f
的调用类似于f( argument1, argument2, ... )
。
return
中的main
语句已被删除
main
是一个非常特殊的函数,具有默认的返回值(即0)。
就个人而言,我更愿意使用C ++ auto
语法来进行函数声明,因为这样可以更容易地扫描代码并且一个通用函数声明
句法。然而,这仍然不是很常见的做法,所以我在这里没有这样做。