我是Visual Studio的新手,我正在开发一个项目,我想在其中使用多个.cpp文件。基本上我想在function.cpp中的main.cpp之外创建一个函数,该函数应该能够更改全局变量。然后我将在main.cpp中使用该函数。
我尝试制作名为globals.h的标题并在其中加入静态变量。我在main和function.cpp中都包含了globals.h并且它已编译但是每当我在main中调用该函数时它都没有任何内容。 当我尝试在main.cpp中包含function.cpp时,我在编译时会遇到多个定义错误。
我做错了什么?提前谢谢!
答案 0 :(得分:4)
不要在头文件中使用static
个变量。当标题被“合并”在编译单元中时,标题中声明为static
的所有变量仅限于编译单元内。您将无法在cpp文件中使用相同的全局变量。
这就是你的结构应该如何:
globals.h
------
extern int my_global_integer;
main.cpp
------
#include "globals.h"
// here use my_global_integer;
function.cpp
------
#include "globals.h"
// global variables have to be declared in exactly one compilation unit.
// otherwise the linker will complain that the variable is defined twice.
int my_global_integer = 0;
答案 1 :(得分:0)
“试着在main.cpp中包含function.cpp”是什么意思?你是否试图在main.cpp中使用function.cpp的函数?在这种情况下,你需要做的就是在你的main.cpp文件中包含function.h。
对于错误部分,请确保您已在#ifndef和#endif语法中提供了头文件的原型和数据变量。这应解决多重定义错误。
你的function.h应该是,
#ifndef FUNCTION_H
#define FUNCTION_H
//变量声明和原型声明在这里
#ENDIF