全局声明类对象但不带参数

Con*_*ler 2 c++ class

所以这是我的情况:我有一个类foo驻留在foo.cpp中,头文件foo.h包含在我的main.cpp中.我需要能够在main.cpp中将foo对象声明为全局变量,以便main.cpp中的所有函数都可以使用它,而不必每次都传递对它的引用.问题是,foo的构造函数需要一个变量,直到main.cpp中的main函数中途才能从用户检索.我以为我可以这样做:

static foo myFoo;
Run Code Online (Sandbox Code Playgroud)

作为主函数之上的全局变量,然后在从用户检索必要的数据之后(让我们称之为"变量"),我可以调用:

myFoo = new foo(variable);
Run Code Online (Sandbox Code Playgroud)

我得到一个错误但是这个:

错误:没有匹配函数来调用'foo :: foo()'

引用该行 static foo myFoo;

所以它基本上是说我试图用一个带零参数的构造函数来声明一个foo实例,当没有参数时.

所以我的问题是:有没有办法将foo中的标签myFoo声明为全局变量,以便程序编译,然后实际上可以使用带有变量的构造函数实例化?

我知道我可以这样做:

string temp = "";
static foo myFoo(temp);
Run Code Online (Sandbox Code Playgroud)

在main()之上,然后在我能做的地方定义了一些函数

myFoo.setVar(variable);
Run Code Online (Sandbox Code Playgroud)

当我需要的时候.对我来说,这是非常难看的,并且需要包含函数setVar,除了绕过这个问题之外没有任何实际目的.思考?

pad*_*ddy 7

您有一个选择是使您的静态实例成为指针:

static foo *myFoo = NULL;

// Later...
myFoo = new foo(variable);
Run Code Online (Sandbox Code Playgroud)

或者您可能希望使用默认构造函数并Init改为创建方法.

static foo myFoo;

// Later...
myFoo.Init( variable );
Run Code Online (Sandbox Code Playgroud)

当您公开变量时,不要将其定义为static.删除static关键字并extern在标题声明中使用.