此问题在此处已有答案:
How to use visual studio code to compile multi-cpp file? [duplicate](4个答案)
3天前关闭。
我是C++的新手,我正在尝试更好地组织我的代码,通过将方法和变量移到头文件中,这样它们就可以在.cpp
文件中更好地共享。所以现在,我只是在尝试学习如何最好地使用头文件,但我似乎无法制作即使是最简单的程序。
现在,我有两个.cpp
文件和一个.h
文件:
file1.cpp
file2.cpp
header.h
我要做的就是从file1.cpp
内部的main()
调用一个在file2.cpp
中定义的函数。
file1.cpp:
#include <iostream>
#include "header.h"
using namespace std;
void Log(const char* message) {
cout << message << endl;
}
int main() {
InitLog();
Log("Hello World!");
}
file2.cpp:
#include <iostream>
#include "header.h"
using namespace std;
void InitLog()
{
Log("Initializing Log");
}
标题.h:
#pragma once
void InitLog();
void Log(const char* message);
我运行在VScode上,每次运行file1.cpp
时,我都会收到这个错误:
Undefined symbols for architecture x86_64:
"InitLog()", referenced from:
_main in file1-27a581.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
不管出于什么原因,我似乎无法让file1
查看file2
中的函数定义。
我的头文件中还需要包含什么吗?我需要按照一定的顺序编译吗?请帮助!
1条答案
按热度按时间kd3sttzy1#
显示的代码没有问题,代码正常。
问题出在链接器上。您需要编译 *
file1.cpp
* 和 *file2.cpp
,然后将生成的目标文件 link 到最终的.exe
中。您看到的错误来自链接器,而不是编译器。链接器抱怨它找不到InitLog()
的实现代码,file1.cpp
正在调用该代码。这意味着您没有“链接”到编译file2.cpp
生成的目标文件。您说您正在“运行
file1.cpp
“,但这本身还不够好,C++也不是这样工作的。