在所有CPP文件中使用一个Globe变量.如果CPP文件的一个类更改该值,我想从另一个类CPP文件访问它
Use one globe variable in all cpp files.If one class of the cpp file changed the value,I want to access it from another class cpp file
我想在所有CPP文件中使用一个Globe变量。如果CPP文件的一个类更改了值,我想从另一个类CPP文件访问它,这是值最少由任何其他CPP类文件修改。
str.h-全局变量文件
#ifndef MY_PROG
#define MY_PROG
extern char * myname;
#endif
class1.cpp
#include "str.h"
char * myname;
class class1
{
class1(){}
~class1(){}
void Setname1(char *name) { myname = name }
};
class2.cpp
#include "str.h"
char * myname;
class class2
{
class2(){}
~class2(){}
void setName(char *name) { myname = name }
};
class3.cpp
#include "str.h"
class class3
{
class3(){}
~class3(){}
char *GetData()
{
return myname;
}
};
main.cpp
#include "str.h"
int main()
{
class1 c1;
class2 c2;
c1.Setname1("XXXX");
c2.setname("YYYY");
class3 c3;
cout << c3.GetData;
}
执行程序时,我需要获得最后的修改值,即" yyyy"。我是新手CPP,也请告诉我我是否正确使用了外部关键字。如果不是,请给我正确的过程。
您问题的必要条件是了解变量的声明声明和定义 c(以及类型,函数等/c (
extern char * myname;
是声明。它使myname
在同一文件中可以看到其他代码,以便它们可以引用它。
char * myname;
是定义。它不仅使myname
可见,还可以指示编译器为其分配空间并使其地址已知。
,只要它们彼此不矛盾,您可以在代码中具有同一变量的同一变量声明。没有定义。如果您两次定义一个东西,则需要分配两个地址,然后其他对象文件在引用它时如何"理解"使用哪个地址?分配的空间也是如此 - 如何处理分配的多余部分?这是您看到的错误。
使代码工作起作用,只有一个文件中的myname
定义一个和一个定义。它一定不能是标头文件,因为它被复制到多个源文件中,从而创建多个定义。它可以是任何其他C 文件。
在其余文件中(或其中包含的单个标头中(,如果在特定文件中引用了myname
的多个声明。如果没有,您可以省略特定单位。
这都说,这被认为是一个非常糟糕的实践通过全局可变的共享变量在编译单元之间传达数据。它们使代码成为噩梦,以调试和理解,并且不可能并行化。没有人认为为他们编写的代码赚钱,应该使用它们。相反,最好的方法是将可变的对象作为方法/函数参数之一。详细信息实际上取决于您的应用程序的其余部分。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 为什么我的主文件.cpp不打印头文件中的任何内容
- 生成文件错误 - 找不到文件 - *.cpp
- 如何在文件.cpp gtkmm中声明小部件
- 没有实现文件(.cpp)的派生类
- 如何使用"CMakeLists.txt"中的add_library将整个文件(.cpp,.h等)包含在目录中
- 如何在Linux / Windows操作系统上使用文件*.cpp一步编译下面的代码
- 关于 Linux .so 文件无法链接到主文件.cpp文件
- 文件.cpp从Windows到Linux
- Ubuntu C++ 编译器错误: g++: 错误: 文件.cpp: 没有这样的文件或目录
- 如何将文件.cpp编译为本机编译
- 使用模板类时,似乎无法包含除 main 以外的任何 cpp 文件.cpp
- 无法编译C++文件.cpp。C++98模式
- 为什么C++头文件不需要包含实现文件 (.cpp)
- 如何访问位于独立文件(.cpp)中的非成员函数
- 如何在Visual Studio Code中通过键盘快捷键切换头文件/cpp文件
- 如何将数据从stringstream写入文件(CPP)
- 为什么filestream不把空白写入文件cpp ?