【问题标题】:Creating multiple Instances of Custom Class in C++在 C++ 中创建自定义类的多个实例
【发布时间】:2017-11-27 14:47:51
【问题描述】:

基本上就是标题所说的。我有一个带有这个构造函数的自定义命名类 Color:

Color(component_t r, component_t g, component_t b) : r(r), g(g), b(b) {

    }

我正在处理的“图像”类已经有一个受保护的值:颜色*缓冲区 我正在尝试用另一个 float* 数组中的数据填充 Color 类的实例。这是我的代码:

    Color* buffer = new Color[width*height];

    float* r = new float[width*height];
    float* g = new float[width*height];
    float* b = new float[width*height];

    int i = 0;

    do {
        r[i] = buff[i];
        i++;
        g[i] = buff[i];
        i++;
        b[i] = buff[i];
        i++;
    } while (i < width*height);

    for (int k = 0; k < width*height; k++) {


        buffer[k] = new Color(r[k], g[k], b[k]);
    } 

但是,在 for 循环内的 'buffer[k]=new Color(r[k],g[k],b[k])' 行中,它给了我 'no operator "=" 匹配这些操作数,操作数类型为:Color=Color*'

我做错了什么?

【问题讨论】:

  • 除了使用原始指针吗? ;) {尽可能使用智能指针;或 std::vector 你在做什么!}
  • buffer[k]是颜色类型,如错误消息所述。为什么 ypu 使用 new 呢?
  • g[i] = buff[i];?你不认为你需要两个不同的索引吗?你给 r[0], g[1], b[2] 赋值。
  • 使用指针和new,不使用std::vector。

标签: c++ arrays class ppm


【解决方案1】:

您已经在这里创建了所有Colors:

Color* buffer = new Color[width*height];

要更改 buffer 成员的值,您可以这样做

buffer[k] = Color(r[k], g[k], b[k]);

无需分配新的Color,您之前已经这样做了。

【讨论】:

    【解决方案2】:

    您可以执行以下类似操作: 它并不完美;因为有颜色对象的副本; (但如果您愿意,也可以将其删除)但它试图向您展示使用向量可以对您的代码做什么。

    std::vector<Color> buffer;
    buffer.reserve(width*height);
    
    int i = 0;
    
    do {
        float r = buff[i++];
        float g = buff[i++];
        float b = buff[i++]
        buffer.push_back(Color(r,g,b));
    } while (i < width*height);
    

    【讨论】:

    • 最好使用reserve(width*height);push_back(Color(r,g,b));
    【解决方案3】:

    您的 buffer 包含 Color 而不是 Color*

    以下应该有效:

    Color** buffer = new Color*[width*height];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 2021-12-09
      • 2022-12-22
      • 1970-01-01
      相关资源
      最近更新 更多