开始错误的做法
在global.h声明并定义变量
int sharedData = 9;编译出错Building target: CTest
Invoking: GCC C++ Linker
g++ -o "CTest" ./src/CTest.o ./src/global.o
./src/global.o:(.data+0x0): `sharedData'被多次定义
./src/CTest.o:(.data+0x0):第一次在此定义
collect2: 错误: ld 返回 1正确的做法,
在global.h头文件声明
extern int sharedData ;在global.cpp定义初始化
int sharedData = 9;然后在其他文件直接调用就可以了
int main(void)
{
cout<<sharedData<<endl;
return 0;
}
不用包含头文件,直接在调用之前声明一下也可以。
extern int sharedData ;看一下编译
make all
Building file: ../src/CTest.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/CTest.d" -MT"src/CTest.d" -o "src/CTest.o" "../src/CTest.cpp"
Finished building: ../src/CTest.cpp
Building file: ../src/global.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/global.d" -MT"src/global.d" -o "src/global.o" "../src/global.cpp"
Finished building: ../src/global.cpp
Building target: CTest
Invoking: GCC C++ Linker
g++ -o "CTest" ./src/CTest.o ./src/global.o
Finished building target: CTest第一步
CTest.cpp编译为CTest.o 此处其实用到了global文件的变量,由于此阶段只需要包含头文件,让CTest.cpp知道global文件变量的声明即可。
第二部
global.cpp编译为global.o
第三部
链接CTest.o和global.o ,生成可执行文件CTest。
本文介绍了在C++中如何正确地声明和使用全局变量。通过对比错误的实现方式,即在头文件中直接定义变量,文章详细阐述了正确的做法——在头文件中仅声明变量,并在对应的cpp文件中进行定义和初始化。此外,还提供了编译过程的步骤说明,帮助读者理解整个编译链接流程。
4016

被折叠的 条评论
为什么被折叠?



