可变大小的对象可能无法初始化?

问题描述 投票:0回答:1

我必须用从 XML 文件获取的数组元素替换 400 个文字浮点数。

您能否修复此代码以使用数组元素而不是文字,发布编码解决方案?

  1. https://cpp.sh/ 上,我使用以下代码收到以下编译器错误。

    #define SET_THING(guest, toy, size, thing)\
    double toy[size] = thing
    
    int main ()
    {
      int i2[2];
    
      i2[0] = 2;
    
      SET_THING(guest,name, i2[0], {1.9});
    }
    
    main.cpp:10:25: error: variable-sized object may not be initialized
      SET_THING(guest,name, i2[0], {1.9});
                            ^~~~~
    main.cpp:2:12: note: expanded from macro 'SET_THING'
    double toy[size] = thing
               ^~~~
    1 error generated.
    
  2. https://cpp.sh/上,我没有收到以下代码的编译器错误:

    #define SET_THING(guest, toy, size, thing)\
    double toy[size] = thing
    
    int main ()
    {
      int i2[2];
    
      i2[0] = 2;
    
      SET_THING(guest,name, 2, {1.9});
    }
    

我尝试向宏发送非数组变量,但没有成功。

c++ macros
1个回答
0
投票

标准 C++ 没有可变长度数组 (VLA)。不过,您可以将其改为

std::vector<double>

#include <iostream>
#include <vector>

#define SET_THING(guest, toy, size, thing) \
    std::vector<double> toy thing;         \
    toy.resize(size)

int main() {
    int i2[2];

    i2[0] = 2;

    SET_THING(guest, name, i2[0], {1.9});

    std::cout << name.size() << '\n' // 2
              << name[0] << '\n';    // 1.9
}

注意:尚不清楚

guest
的用途。我建议删除它。

© www.soinside.com 2019 - 2024. All rights reserved.