初始化没有指针的结构体

C++ Initializing Struct Without Pointer

本文关键字:结构体 指针 初始化      更新时间:2023-10-16

我有一个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;

但是编译器抱怨不能将指针转换为常规变量。指针是什么?从这个问题,我认为你可以简单地创建一个新的结构,而不必处理指针和动态内存分配与new。这是否与我像C中那样初始化结构而不是使用构造函数有关?

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

尝试:

DIFColor d = { r, g, b };

操作符new将返回指向你的结构体的指针。如果你想在堆上声明对象

DIFColor* d = new DIFColor;
d->r = r;
d->g = g;
d->b = b;

或者在堆栈上声明不要使用new

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

你不应该毫无理由地使用动态分配,在你的代码中没有理由,所以删除new:

DIFColor d = new DIFColor();

替换为

DIFColor d;

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

创建一个指针。你应该写

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

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

操作符返回一个指针

所以,正确的语法应该是:
DIFColor* d = new DIFColor();