【问题标题】:C++ Initializing Struct Without Pointer [duplicate]没有指针的C ++初始化结构[重复]
【发布时间】:2014-07-30 13:35:29
【问题描述】:

我有一个 C++ 结构

typedef struct DIFColor
{
    uint8_t r;
    uint8_t g;
    uint8_t b;


} DIFColor;

我正在尝试像这样初始化它:

DIFColor d = new DIFColor();

d.r = r;
d.g = g;
d.b = b;

但是编译器抱怨无法将指针转换为常规变量。什么指针?从this question 我认为您可以简单地创建一个新结构,而无需使用new 处理指针和动态内存分配。这与我像在 C 中那样初始化结构而不是使用构造函数这一事实有关吗?

error: conversion from 'DIFColor*' to non-scalar type 'DIFColor' requested

【问题讨论】:

  • 有很多问题试图做到这一点。为什么人们在使用该语言之前不阅读教程?

标签: c++ pointers struct


【解决方案1】:

试试:

DIFColor d = { r, g, b };

【讨论】:

    【解决方案2】:

    运算符new 将返回一个指向您的结构的指针。如果你想在 heap

    上声明对象
    DIFColor* d = new DIFColor;
    d->r = r;
    d->g = g;
    d->b = b;
    

    或者在stack上声明它不要使用new

    DIFColor d;
    d.r = r;
    d.g = g;
    d.b = b;
    

    【讨论】:

      【解决方案3】:

      你不应该无故使用动态分配,而且你的代码中没有任何理由,所以删除new

      DIFColor d = new DIFColor();
      

      替换为

      DIFColor d;
      

      【讨论】:

        【解决方案4】:

        中的new关键字
        DIFColor d = new DIFColor();
        

        创建一个指针。你应该写

        DIFColor d = {r,g,b}; // allocate on stack
        

        DIFColor * d = new DIFColor(); // make a pointer
        

        【讨论】:

          【解决方案5】:

          new 运算符返回一个指针

          所以,正确的语法应该是:

          DIFColor* d = new DIFColor();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-18
            • 1970-01-01
            相关资源
            最近更新 更多