链接两个文件
Linking two files
我创建了两个基本的 .cpp 文件。第一个只有一行代码:
int var=10;
,第二个是这样的:
#include <iostream>
using namespace std;
int main(){
cout<<var;
return 0;
}
我使用 gcc -o myprogram file1.cpp file2.cpp
编译我的代码并且我总是收到此消息:
error: ‘var’ was not declared in this scope
13 | cout<<var;
有人知道怎么解决吗?
如果“var”是一次性的,那么只需添加一个extern:
#include <iostream>
using namespace std;
extern int var;
int main(){
cout<<var;
return 0;
}
如果您的“第一个 .cpp”增长,并且您开始添加其他模块将要使用的东西,那么您可能想要:
- 定义一个或多个classes
- 为您的 class 定义创建头文件
每个翻译单元必须包含它使用的每个符号的声明。另一方面,每个符号必须在一个翻译单元中有一个定义(除非它是显式或隐式的inline
;那么多个翻译单元可以有定义,只要它们'都一样)。
通常的做法是将声明放在header文件中,然后#include
进入多个翻译单元,同时将它们的 定义 放入构成翻译单元主要 body 的 .cpp 文件中。
在这种特殊情况下,您需要在包含 main
的翻译单元中声明 var
。你可以把它放在一个 header 中,使 #include
d 变成 file1.cpp;即:
file2.hpp:
#ifndef FILE1_HPP
#define FILE1_HPP
extern int var;
#endif
file2.cpp:
#include "file2.hpp"
int var;
file1.cpp:
#include "file2.hpp"
#include <iostream>
int main() {
std::cout << var;
}
或者您只是手动将其放入那个翻译单元;即
#include <iostream>
extern int var;
int main()
{
std::cout << var;
}
从编译器的角度来看,这两种方法都完全相同(预处理器只是进行文本替换),但后者对人类来说往往更难处理,因此您通常应该避免使用它。
基本上问题是我使用 gcc -o myprogram learn.cpp help.cpp
而不是 g++ -o myprogram learn.cpp help.cpp
来编译。 Gcc 编译器用于 .c 文件,g++ 用于 .cpp 文件
我创建了两个基本的 .cpp 文件。第一个只有一行代码:
int var=10;
,第二个是这样的:
#include <iostream>
using namespace std;
int main(){
cout<<var;
return 0;
}
我使用 gcc -o myprogram file1.cpp file2.cpp
编译我的代码并且我总是收到此消息:
error: ‘var’ was not declared in this scope
13 | cout<<var;
有人知道怎么解决吗?
如果“var”是一次性的,那么只需添加一个extern:
#include <iostream>
using namespace std;
extern int var;
int main(){
cout<<var;
return 0;
}
如果您的“第一个 .cpp”增长,并且您开始添加其他模块将要使用的东西,那么您可能想要:
- 定义一个或多个classes
- 为您的 class 定义创建头文件
每个翻译单元必须包含它使用的每个符号的声明。另一方面,每个符号必须在一个翻译单元中有一个定义(除非它是显式或隐式的inline
;那么多个翻译单元可以有定义,只要它们'都一样)。
通常的做法是将声明放在header文件中,然后#include
进入多个翻译单元,同时将它们的 定义 放入构成翻译单元主要 body 的 .cpp 文件中。
在这种特殊情况下,您需要在包含 main
的翻译单元中声明 var
。你可以把它放在一个 header 中,使 #include
d 变成 file1.cpp;即:
file2.hpp:
#ifndef FILE1_HPP
#define FILE1_HPP
extern int var;
#endif
file2.cpp:
#include "file2.hpp"
int var;
file1.cpp:
#include "file2.hpp"
#include <iostream>
int main() {
std::cout << var;
}
或者您只是手动将其放入那个翻译单元;即
#include <iostream>
extern int var;
int main()
{
std::cout << var;
}
从编译器的角度来看,这两种方法都完全相同(预处理器只是进行文本替换),但后者对人类来说往往更难处理,因此您通常应该避免使用它。
基本上问题是我使用 gcc -o myprogram learn.cpp help.cpp
而不是 g++ -o myprogram learn.cpp help.cpp
来编译。 Gcc 编译器用于 .c 文件,g++ 用于 .cpp 文件