C ++初始化没有指针的结构

时间:2014-07-30 13:35:30

标签: c++ pointers struct

我在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

5 个答案:

答案 0 :(得分:6)

尝试:

DIFColor d = { r, g, b };

答案 1 :(得分:3)

运算符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;

答案 2 :(得分:2)

您不应无理由使用动态分配,并且代码中没有理由,因此请删除new

DIFColor d = new DIFColor();

替换为

DIFColor d;

答案 3 :(得分:1)

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

创建一个指针。你应该写

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

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

答案 4 :(得分:1)

运算符会返回指针

所以,正确的语法是:

DIFColor* d = new DIFColor();