“Struct *”类型的值不能分配给“Struct *”类型的实体

时间:2014-04-05 14:33:59

标签: c++ pointers struct

我有一个返回结构类型指针的函数。我想要的是pFacialFeatures指向与返回指针相同的地址。

struct Features
{
    CvRect* face_;
    CvRect* nose_;
    CvRect* eyesPair_;
    CvRect* rightEye_;
    CvRect* leftEye_;
    CvRect* mouth_;
};

Features* Detect()
{
    Features* facialFeatures = (Features*) malloc(sizeof(Features));
    return facialFeatures;
}

int main(int argc, char* argv[])
{
    Features* pFacialFeatures;
    pFacialFeatures = Detect();
}

它给了我错误:

  

智能感知:类型值#34;功能*"无法分配给"功能*"

类型的实体

注意:也许您可能认为此问题与此one相同。在那个问题中,声明结构存在问题。我真的声明了结构。

2 个答案:

答案 0 :(得分:1)

您已经以某种方式通知Visual Studio这是一个C源文件而不是C ++源文件 - 可能是通过命名文件" something.c"或者将其放在头文件中,然后将其包含在" .h"档案或通过悬挂" extern C"或者以某种方式将文件或项目的属性设置为"编译为C"。如果您正在使用Linux / MacOS,您可能通过使用C编译器而不是C ++编译器来完成它,例如,输入" gcc foo.cpp"而不是" g ++ foo.cpp"

结构声明的C语言语法与C ++中的不同。

C ++声明

struct Foo {}; // C++

等同于C:

typename struct tagFoo {} Foo; // C

因此,以下代码可以在C ++中使用,但在C中失败:

struct Foo {};
Foo* f = (Foo*)malloc(sizeof(Foo));

更改此选项以检查C ++的快速方法是替换:

Features* facialFeatures = (Features*) malloc(sizeof(Features));

Features* facialFeatures = new Features;

如果您在C模式下进行编译,则会收到有关new的编译器错误。它是C ++中的关键字,但不是C中的关键字。

用C编写行的方法是

struct Features* facialFeatures = malloc(sizeof* facialFeatures);

答案 1 :(得分:-1)

我相信你需要在声明类型之前放置struct:

struct Features* facialFeatures = (struct Features *)malloc(sizeof(struct Features));