首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在*.hxx中声明的空函数,在*.cxx中定义,但在*.c中未定义

在*.hxx中声明的空函数,在*.cxx中定义,但在*.c中未定义
EN

Stack Overflow用户
提问于 2018-12-20 02:32:45
回答 1查看 237关注 0票数 1

我正在尝试声明一个可通过不同的*.c文件访问的全局函数。

我已经在param.hxx中声明了它,在param.cxx中定义了它,我想在compute_grid.c中访问它。

不幸的是,在编译过程中,我遇到了以下错误:

代码语言:javascript
复制
compute_grid.c:(.text+0x5) : undefined reference to « grid_create »

我对C中的函数声明不是很熟悉。实际上,我正在构建一个大程序的模块部分,我从另一个看起来有效的代码文件中复制了这些声明。

不幸的是,该计划是非常机密的,我不能访问所有的来源,但我会尽我最大的努力给你过期的部分…

param.hxx:

代码语言:javascript
复制
typedef struct grid_t
{
    int   *test;
} grid_t;

void 
grid_create(void);

extern grid_t *grid;

param.cxx:

代码语言:javascript
复制
#include <malloc.h>
#include "param.hxx"

grid_t *grid;

void grid_create(void)
{
    grid = (grid_t*)malloc(sizeof(grid_t));
    grid->test = (int*)malloc(sizeof(int));
    *grid->test = 123;
}

compute_grid.c:

代码语言:javascript
复制
#include "param.hxx"

void
compute_grid()
{
    grid_create();

    return;
}

感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-20 02:38:33

.cxx是用于C++文件的扩展名之一。您的编译器可能正在使用文件的扩展名将源代码编译为C++。编译C文件时,它会生成对C符号grid_create的未解析引用,但已编译的C++文件将grid_create定义为C++符号。因此,链接器将保留对grid_create的C符号引用未解析,因为只有一个C++符号与void grid_create(void)关联。

您可以尝试保护头文件,以便C++编译器生成C符号而不是C++符号。

代码语言:javascript
复制
#ifdef __cplusplus
extern "C" {
#endif

void 
grid_create(void);


#ifdef __cplusplus
}
#endif
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53857272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档