【问题标题】:Passing a struct with multiple entries in c++在 C++ 中传递具有多个条目的结构
【发布时间】:2010-06-27 08:11:04
【问题描述】:

我正在尝试通过以下方式传递一个坐标,该坐标定义为具有 2 个整数参数的结构(该结构称为坐标):

UpdateB({0,0}); 

输入参数的类型是 coord(即在上面的语句中,我试图传递一个坐标 0,0)。 UpdateB 是一些功能。我收到一个错误,任何想法 问题可能是什么?

【问题讨论】:

  • 语法错误,例如缺少; } { 等。我认为它不喜欢 UpdateB({0,0}) 中的大括号表示法,但我看不出它有什么问题。

标签: c++ struct parameter-passing


【解决方案1】:

创建一个接受两个参数的构造函数。 传递如下:

MyFunc(Point2d(0,0));

【讨论】:

    【解决方案2】:

    Pavel 说对了。如果要在将结构实例传递给函数时创建它,则需要为它创建一个构造函数。然后创建一个新的 coord 实例作为您传递给函数的参数。对于结构,类似...

    struct coord
    {
        int x, y;
    
        coord(int xvalue, int yvalue)
        {
            x = xvalue;
            y = yvalue;
        }
    };
    

    ...应该可以解决问题。然后运行...

    UpdateB(coord(x, y));
    

    ...其中 x 和 y 是您的值。

    【讨论】:

    • 更好的构造函数声明是初始化列表: struct coord { coord(int xvalue, int yvalue) : x(xvalue), y(yvalue) {} int x, y; }
    【解决方案3】:

    您使用的语法将是有效的 C++0x (uniform initializers) 和有效的 C99(复合文字)。
    在 C++03 中,您必须使用用户定义的构造函数或辅助函数,花括号语法仅适用于 aggregate initialization

    如果您的结构是 POD 并且您需要它保持不变,则必须使用辅助函数:

    coord make_coord(int x, int y) {
        coord c = {x, y};
        return c;
    }
    
    UpdateB(make_coord(x, y));
    

    否则,如前所述,给它一个构造函数

    【讨论】:

    • 我以前见过UpdateB( (coord){1,2} ) 在 g++ 中工作(不需要辅助函数),但我怀疑这是否是正确的 C++...
    • @David:在 C++98/03 中不是这样,g++ 支持复合文字作为扩展。
    【解决方案4】:

    Pavel Radzivilovsky 的解决方案是正确的 (+1)。

    但是你必须知道,如果你提供一个带有两个参数的构造函数(也许你提供一个带有初始化列表的构造函数,但这在这里没有用),那么即将到来的新标准 C++0x 将允许你的示例的语法。

    This feature is already available in GCC starting v4.4,如果你使用它,你可以通过启用C++0x来启用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多