C++ 初始化基于类的全局变量

标签 c++

我正在尝试定义一些全局变量,这些变量应该在所有函数中都可用,但想从主程序中初始化。谁能帮我解决语法问题?请注意,对于 C++ 类等仍然有点初学者。因为我需要多次运行该程序的相同拷贝并且不想在该程序的多个实例中拥有相同的共享类 - 需要确保我创建一个新的主体中的类。还想提一下 - printvars - 对我来说是一个预建函数,我无法控制将任何指针变量传递给它 - 只是我只能在该函数中使用全局变量。

class gvars
{
   public:
   int x=0;
   int y=0;
   gvars() {}
   ~gvars() {}
};

std::unique_ptr<gvars> *g=NULL;  // Must be a pointer to class

//I can't pass any parameters to this function
//Only have control over the body of the program to access global vars
void printvars()
{
   std::cout << (*g).x << " " << (*g).y << std::endl;
}

int main()
{

  if (g==NULL)
  {
     g=new gvars();  // This is critical  - create a new class here only
  }

  (*g).x=10;
  (*g).y=20;

  printvars();  // Expected output :  10   20

  delete g;

  return 0;
}

最佳答案

代码很好,除了只有一行。 尝试改变

std::unique_ptr<gvars> *g=NULL;  // Must be a pointer to class

gvars*g=NULL;

程序肯定会在每次运行时创建/删除您的类的新实例。此外,printvars 应该可以正常工作。

关于C++ 初始化基于类的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16630393/

相关文章:

c++ - epoll读取问题

c++ - 与类相同类型的对象

c++ - 如何在 C++ 中优雅地处理抽象工厂和数组作为返回类型?

c++ - 函数重载问题C++

c++ - unique_ptr 的 deque vector 的编译器错误

c++ - 对列表和对的混淆

c++ - fread() 或 fseek() 在 win32 上失败但在 mac32 上失败

c++ - 最简单的 Qt 对话框

c++ - C++中非指针数组的删除

c++ - arma::find_unique 如何确定唯一索引?