C++ 链接器问题,未解析的外部符号与我自己的代码

标签 c++ visual-studio-2010 linker

我一直有一个相当令人沮丧的链接器问题,对我来说没有多大意义。我有以下 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 中的声明中,检查以确保两个源文件都在同一目录中并进行编译,然后清理构建。但似乎没有任何帮助。考虑到一个相同的函数如何链接良好而另一个函数却不能正常链接,这让我感到困惑,我不确定是什么原因造成的。

最佳答案

picture of config menu

根据其中一条评论,VerseCompiler.cpp 似乎表现得很奇怪。我检查了它的属性页以查看它是否被排除在构建之外并发现了另一个罪魁祸首:

尽管文件名不同,但它仍被 Visual Studio 视为头文件。我猜我一定是错误地将它创建为 .cpp 文件并重命名了它而没有意识到这并没有改变它的行为。将其设置为 C/C++ Compiler 解决了我的链接器问题。

关于C++ 链接器问题,未解析的外部符号与我自己的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36912300/

相关文章:

linux - 静态库 (.a) 和共享库 (.so) 之间的文件格式差异?

c++ - 了解 C++ 模板错误

vb.net - 扩展方法不是类的成员

c# - 应用程序不包含定义

linker - msvc 上缺少用于标准库函数调用的 lib 文件

c - 找到一个符号和其他 "unresolved external symbol"

c++ - 如何在 Visual Studio 中读取调试内存窗口

c++ - Ebpf:助手的 undefined symbol

c++ - 计算返回零而不是预期结果

C# 将输入与mysql值进行比较