我一直有一个相当令人沮丧的链接器问题,对我来说没有多大意义。我有以下 4 个文件:
// CompileFunctions.h
#pragma once
#include "FileListing.h"
int compileSheet(FileListing & file);
int compileVerse(FileListing & file);
// CompileSheet.cpp
#include "CompileFunctions.h"
int compileSheet(FileListing & file){
...
}
// CompileVerse.cpp
#include "CompileFunctions.h"
int compileVerse(FileListing & file){
...
}
// main.cpp
#include "CompileFunctions.h"
int main(){
...
compileSheet(file);
compileVerse(file);
}
这会产生以下链接器错误:
main.obj : error LNK2001: unresolved external symbol "int __cdecl compileVerse(struct FileListing &)" (?compileVerse@@AAUFileListing@@@Z)
我已经尝试将 extern
添加到 header 中的声明中,检查以确保两个源文件都在同一目录中并进行编译,然后清理构建。但似乎没有任何帮助。考虑到一个相同的函数如何链接良好而另一个函数却不能正常链接,这让我感到困惑,我不确定是什么原因造成的。
最佳答案
根据其中一条评论,VerseCompiler.cpp
似乎表现得很奇怪。我检查了它的属性页以查看它是否被排除在构建之外并发现了另一个罪魁祸首:
尽管文件名不同,但它仍被 Visual Studio 视为头文件。我猜我一定是错误地将它创建为 .cpp 文件并重命名了它而没有意识到这并没有改变它的行为。将其设置为 C/C++ Compiler
解决了我的链接器问题。
关于C++ 链接器问题,未解析的外部符号与我自己的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36912300/