【问题标题】:C++ Using default values for parametersC++ 使用参数的默认值
【发布时间】:2012-07-05 23:08:16
【问题描述】:

我是 C++ 新手(来自 C# 背景),我有一个具有以下签名的函数

 void AddBenchNode(ref_ptr<Group> root ,ref_ptr<Node> benches, bool setAttitude = false, float scale_x =.15, float scale_y =15, float scale_z = 15, int positionx = 250, int positiony = 100, int positionz =0 )
{

}

但是当我尝试调用下面的代码时,我收到一个错误,指出函数不接受 4 个参数。

//then I try to call my function like so
AddBenchNode(root, benches, false, 250);

但我却收到以下错误消息

错误 C2660: 'AddBenchNode' : 函数不接受 3 个参数

希望能解释一下 C++ 是如何做到这一点的吗?

【问题讨论】:

  • 默认参数应该在头文件中声明,而不是在实现文件中。
  • 你应该提供一个最小的自包含编译示例,每个人都可以自己尝试看看你看到了什么。
  • 请发布完整的编译错误。

标签: c++ parameters default-value


【解决方案1】:

检查 .hpp 文件中的原型。它可能被声明为

void AddBenchNode(ref_ptr<Group> root ,ref_ptr<Node> benches, bool setAttitude, 
                  float scale_x, float scale_y, float scale_z, int positionx, 
                  int positiony, int positionz);

编辑:标题中的原型应该是

void AddBenchNode(ref_ptr<Group> root ,ref_ptr<Node> benches, bool setAttitude = false, float scale_x =.15, float scale_y =15, float scale_z = 15, int positionx = 250, int positiony = 100, int positionz =0 );

你的 cpp 文件应该只有

void AddBenchNode(ref_ptr<Group> root ,ref_ptr<Node> benches, bool setAttitude, float scale_x, float scale_y, float scale_z, int positionx, int positiony, int positionz)
{

}

即默认参数在原型中,而不是在实际定义中。

【讨论】:

  • 这是原型 void AddBenchNode(osg::ref_ptr<:group>,osg::ref_ptr<:node>, bool, float, float, float, int, int, int );
  • 我的问题是为什么我不能以这种方式调用相同的函数 AddBenchNode(root, benches, false, 250);
  • +1,但我认为你的第一行应该说“声明”,最后一行应该说“定义”。只是挑选尼特;-)
  • 谢谢。你是对的,我是反过来的。谢谢!
猜你喜欢
  • 2012-05-04
  • 2012-10-11
  • 2010-10-26
  • 2012-08-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 2011-10-10
相关资源
最近更新 更多