我想在c ++类中增加一个全局变量,但无法配置如何执行此操作
int line = 0;
int ivar = 0;
int cvar = 0;
int svar = 0;
class file {
protected:
char name[50];
string read;
string write;
ifstream readfile;
ofstream writefile;
int i;
int j;
};
我想在类文件中增加cvar变量。像
这样的东西class file {
protected:
char name[50]; cvar++;
string read;
string write;
ifstream readfile;
ofstream writefile;
int i;
int j;
};
但是如果以这种方式完成,编译器会给出错误。有人可以设计一种替代方法吗?
答案 0 :(得分:2)
你可以,但增量需要在类的方法中。
使用默认构造函数可以正常工作,这样可以在创建类的新实例时发生增量:
file::file() /*ToDo - declare this in the class definition*/
{
cvar++;
}
最后,使用std::atomic<int>
作为cvar
的类型是个好主意,以防止并发问题(即cvar
上的同时读写)。
答案 1 :(得分:1)
您不能在类定义中放置要执行的代码行。他们需要参与其中。
也许在你的情况下,一个构造函数:
class file {
public:
file() {
cvar++;
}
protected:
char name[50];
string read;
string write;
ifstream readfile;
ofstream writefile;
int i;
int j;
};
有几种比全局变量更好的方法 - 这取决于你想要实现的目标。
答案 2 :(得分:0)
来自你的评论:
我正在尝试为我的程序添加一个计数器来计算数量 完整程序中声明的字符类型变量。
全局变量并不好。另外&#34;手动&#34;每当你使用char[]
时递增计数器也不是很好。我可能会使用类似的东西:
struct MyString {
std::string theString;
static int counter;
MyString() { counter++;}
};
int MyString::counter = 0;
然后
struct file {
MyString name;
/*...*/
};
static
变量或多或少类似于全局变量,但它会污染您的命名空间,因为它属于它所属的位置(MyString::counter
)。此外,如果您使用MyString
,则每次需要字符串时都没有机会忘记递增计数器。最后但并非最不重要的是,我从char[]
更改为std::string
,因为除非有std::string
优先char[]
优先{。}}。