繁体   English   中英

可以在C ++中的各种类中访问和修改全局变量

[英]can global variables be accessed and modified in various classes in C++

我遇到了代码意粉,我需要在其中检测流量控制,即一次发送一个数据。 我如何使用全局变量来解决这个问题? 如果全局变量不起作用,访问和修改可能在不同类中的多个函数中的变量的方式是什么

我尝试了以下操作(我正在粘贴部分代码),但它给了我我无法解决的ld错误。 我想问一下解决这个问题的最佳方法。

文件1.h

int data_received; //global variable
class abc
{
.
.
.
public:
  void send_data(..)
.
.
.
};

文件1.c

void send_data()
{
  while(!end_of_file)
  {
    read_line;
    data_received = 0;
    transmit_data(line);
    while(data_received == 0)
      cout<<"waiting for response before proceeding\n";

  }

}

文件2.c

//data receive class

void transmit_data()
{
 ....
 ....
 ....
//data sent upstream
 data_received = 1;
}

我搜索了许多关于stackoverflow的帖子,但是没有明确的答案。 有些人建议使用extern变量,但没有明确的例子说明在多个类函数中修改外部变量。

您需要在头文件中标记该extern ,然后在file1.cfile2.c对其进行一次定义。

例如

文件1.h

extern int data_received;

文件1.c

// initialize it 
int data_received = 0;

文件2.c

// either do this if the include is logically needed
#include "file1.h"
// or 
extern int data_received;

// then use it normally
void foo() {
    cout << data_received << endl;
}

或者,如果这是C ++,则可以将该变量声明为类中的static变量,在.cpp文件中对其进行定义,然后将其像普通变量一样使用,但以该类的范围解析为前缀。 例如

class Something {
public:
    static int data_received = 0;
};

void foo() {
    cout << Something::data_received << endl;
}

通过在头文件中定义全局变量,您将在它包含的所有“ c”文件中创建它的副本。 到目前为止,ld将抱怨。 您需要在头文件中将其声明为“ extern”,然后在单个“ c”文件中对其进行定义。

file1.h

extern int data_received; 

文件1.c

#include <file1.h>
int data_received = 0;

文件2.c

#include <file1.h>

这样,您将只定义它的一个副本,并使所有包含头文件的文件都知道它。

请进一步了解

  • 在C和C ++中DeclareDefine
  • compilelink

define全局变量

// file1.cpp
int data_received; 

extern告诉编译器在链接器时可以找到data_received

// file2.cpp
extern int data_received;

另外, static可以限制my_global_var仅在定义它的文件中使用。

// file3.cpp
static int my_global_var = 1;

linker中将发生错误

// file4.cpp
extern int my_global_var;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM