问题:“错误LNK2019:未解析的外部符号”

时间:2013-12-11 14:31:30

标签: c++ c lnk2019

我的设置相对简单。

我有一个新的Console C ++项目。

但我在C中玩全局变量,并添加了两个新的.c文件。

// Fruit.h
extern int global_variable;

现在来源:

// Fruit.c
#include "Fruit.h"
#include <stdio.h>

int global_variable = 37;

此外,

// Orange.h
void use_it(void);

// Orange.c
#include "Orange.h"
#include "Fruit.h"
#include <stdio.h>

void use_it(void)
{
    printf("Global variable: %d\n", global_variable++);
}

最后,这是我的主要内容:

#include "stdafx.h"
#include "Orange.h"
#include "Fruit.h"

int _tmain(int argc, _TCHAR* argv[])
{
    use_it();

    return 0;
}

但这是我得到的错误:“错误LNK2019:未解析的外部符号”void __cdecl use_it(void)“(?use_it @@ YAXXZ)在函数_wmain中引用”

任何帮助?

遵循有关全球变量的建议:here

1 个答案:

答案 0 :(得分:2)

你的主文件是一个C ++文件而外部文件是C,如果你想从头文件中引用C ++中的C函数应该用

包围声明
#ifdef __cplusplus
extern "C"{
#endif

// declarations here

#ifdef __cplusplus
}
#endif

如果这些声明永远不会从C文件中看到,那么

将前缀为extern "C",因为C不知道extern "C"的含义。

问题是编译器正在寻找一个C ++名称错位函数而不是C函数,它使用不同的修改(通常没有)。