为什么使用未签名产品的这个简单功能不起作用?

时间:2014-03-02 05:14:55

标签: c++

我正在使用递归进行家庭作业,我的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;
}

5 个答案:

答案 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语法来进行函数声明,因为这样可以更容易地扫描代码并且一个通用函数声明 句法。然而,这仍然不是很常见的做法,所以我在这里没有这样做。