Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
混合C和C++;。。。对函数的未定义引用 在C++项目中,我试图调用这个函数,它在C:中定义 int CyBtldr_RunAction(CyBtldr_Action action, const char* file, const uint8_t* securityKey, uint8_t appId, CyBtldr_CommunicationsData* comm, CyBtldr_ProgressUpdate* update);_C++_C_Undefined Reference - Fatal编程技术网

混合C和C++;。。。对函数的未定义引用 在C++项目中,我试图调用这个函数,它在C:中定义 int CyBtldr_RunAction(CyBtldr_Action action, const char* file, const uint8_t* securityKey, uint8_t appId, CyBtldr_CommunicationsData* comm, CyBtldr_ProgressUpdate* update);

混合C和C++;。。。对函数的未定义引用 在C++项目中,我试图调用这个函数,它在C:中定义 int CyBtldr_RunAction(CyBtldr_Action action, const char* file, const uint8_t* securityKey, uint8_t appId, CyBtldr_CommunicationsData* comm, CyBtldr_ProgressUpdate* update);,c++,c,undefined-reference,C++,C,Undefined Reference,CyBtldr_ProgressUpdate在C中也定义为: typedef void CyBtldr_ProgressUpdate(uint8_t arrayId, uint16_t rowNum); 我得到了以下未定义的引用错误。我错过什么了吗 .\bootloader.cpp:88: error: undefined reference to 'CyBtldr_RunAction(CyBtldr_Action, char const*, unsigned char const*, uns

CyBtldr_ProgressUpdate在C中也定义为:

typedef void CyBtldr_ProgressUpdate(uint8_t arrayId, uint16_t rowNum);
我得到了以下未定义的引用错误。我错过什么了吗

.\bootloader.cpp:88: error: undefined reference to 'CyBtldr_RunAction(CyBtldr_Action, char const*, unsigned char const*, unsigned char, CyBtldr_CommunicationsData*, void (*)(unsigned char, unsigned short))'
你需要

extern "C"

因为C++函数名在编译时发生了变化。这就是C++中函数和方法重载的原因。 您可以使用它像这样包装函数声明

extern "C" {
    int CyBtldr_RunAction(CyBtldr_Action action, const char* file, const uint8_t* securityKey, uint8_t appId, CyBtldr_CommunicationsData* comm, CyBtldr_ProgressUpdate* update);
}
或者包含声明的文件,比如

extern "C" {
#include "cybtldr_runaction_header.h";
}
如需更详细的解释,您需要

extern "C"

因为C++函数名在编译时发生了变化。这就是C++中函数和方法重载的原因。 您可以使用它像这样包装函数声明

extern "C" {
    int CyBtldr_RunAction(CyBtldr_Action action, const char* file, const uint8_t* securityKey, uint8_t appId, CyBtldr_CommunicationsData* comm, CyBtldr_ProgressUpdate* update);
}
或者包含声明的文件,比如

extern "C" {
#include "cybtldr_runaction_header.h";
}
如需更多详细解释,请参阅

这是一个声明,不是一个定义。声明意味着您可以调用该函数,但它仍然需要在某个地方(在某些编译单元或库中)定义,并且这样做会给您一个链接时“未定义引用”错误,如您所见。所以你需要在某个地方为这个函数定义一个定义,你需要链接它

这个

是一个类型声明,与
CyBtldr\u RunAction
无关,只是用作其参数之一的类型

这是一个声明,不是一个定义。声明意味着您可以调用该函数,但它仍然需要在某个地方(在某些编译单元或库中)定义,并且这样做会给您一个链接时“未定义引用”错误,如您所见。所以你需要在某个地方为这个函数定义一个定义,你需要链接它

这个


是一个类型声明,与
CyBtldr\u RunAction
无关,只是用作它的一个参数的类型。

我不知道我们如何帮助您获得这么少的信息。至少,您需要显示您认为此函数定义在何处,调用在何处,以及用于将两个源链接在一起的命令行。您还应该定义是否在C或C++中工作。也许我们能为你做的最好的帮助就是指向你。(如果我没有投票太快以至于不清楚你在问什么的话,我会把它作为一个复制品关闭)。我不想发布我的整个项目。告诉我是什么原因导致了这个错误会很有帮助吗?我所知道的两个是如果我的调用与原型不匹配或者如果它找不到这个函数,但是我不认为这两个都是罪魁祸首(可能是错误的)。它是用C编写的,我用C++来调用它。允许我这么做吗?可能是重复的我不知道我们如何才能在这么少的信息上帮助你。至少,你需要显示你认为这个函数是在哪里定义的,在哪里调用的,以及你用来将两个源链接在一起的命令行。您还应该定义是否在C或C++中工作。也许我们能为你做的最好的帮助就是指向你。(如果我没有投票太快以至于不清楚你在问什么的话,我会把它作为一个复制品关闭)。我不想发布我的整个项目。告诉我是什么原因导致了这个错误会很有帮助吗?我所知道的两个是如果我的调用与原型不匹配或者如果它找不到这个函数,但是我不认为这两个都是罪魁祸首(可能是错误的)。它是用C编写的,我用C++来调用它。我可以这样做吗?可能的重复听起来李杰很可能是赢家。我明天会试一试,然后重写这个问题,这样对其他人更有用。这听起来李杰很有可能会赢。我明天会试一试,重写这个问题,这样对其他人更有用。