我在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
答案 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();