在所有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 如果      更新时间:2023-10-16

我想在所有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的多个声明。如果没有,您可以省略特定单位。


这都说,这被认为是一个非常糟糕的实践通过全局可变的共享变量在编译单元之间传达数据。它们使代码成为噩梦,以调试和理解,并且不可能并行化。没有人认为为他们编写的代码赚钱,应该使用它们。相反,最好的方法是将可变的对象作为方法/函数参数之一。详细信息实际上取决于您的应用程序的其余部分。