LNK2001:未解析的外部符号“void __cdecl func1(struct Stru1 *)”[复制]

LNK2001: unresolved external symbol "void __cdecl func1(struct Stru1 *)" [duplicate]

提问人:Carlos Siestrup 提问时间:9/2/2015 最后编辑:Carlos Siestrup 更新时间:9/3/2015 访问量:2477

问:

让我编辑问题: 这些文件是:

file1.h
file1.c
file3.h
file2.h
file2.c
file4.h
file5.h
main_code.cpp

文件1.h

#include "file3.h"
typedef struct{} Str1;
void func1(Str1 *str1);
void func2(Str1 *str1);

文件1.c

#include "file3.h"
#include "file1.h"
#include "file2.h"
#include <stdio.h>
#include <math.h>
void func1(Str1 *str1){}
void func2(Str1 *str1){}

文件2.h

#include "file3.h"
#include "file1.h"

文件2.c

#include "file3.h"
#include "file1.h"
#include "file2.h"
#include <stdio.h>
#include <math.h>

文件3.h

Doesnt include others.

文件4.h

#include "file1.h"
#include "file2.h"
#include "file5.h"

文件5.h

#include "file3.h"

main_code.cpp

#include "file1.h"
#include "file2.h"
#include "file4.h"
#include "file5.h"
func1(variable)
func2(variable)

错误“LNK2001:未解析的外部符号”发生在 func1 和 func2 中,所以我没有放置其他函数。我已经尝试将包含放在“extern C”中,但没有奏效。 如果我添加到main_code.cpp

  #include "file1.c"

然后程序工作...

C++ C Visual-Studio-2013 链接器 未解析外部

评论

0赞 molbdnilo 9/2/2015
您需要将所有编译的文件链接在一起。
0赞 MaxP 9/2/2015
链接器说缺少的函数有一个参数,而 file.h 定义带有参数的函数。因此,您的代码或问题中可能缺少(或误抄)了某些内容。此外,除非编译器默认语言是 C++,否则您需要 extern “C” 支撑 C 实现的函数。struct Stru1struct Str1

答:

0赞 marcinj 9/2/2015 #1

您很可能忘记将 file1.c 添加到用于构建的项目中。

以下是在 c++ 中不应该做的事情:

#include "file1.h"
#include "file2.h"  
    func1(variable);
    func2(variable);
 #include "file1.c"
#include "file2.c" 

那些 #include“file1.c”/#include“file2.c”,是你的项目的用途 - 你在IDE中添加新文件。