我有一个返回结构类型指针的函数。我想要的是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相同。在那个问题中,声明结构存在问题。我真的声明了结构。
答案 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));