请问下MFC全局变量定义的问题

我上网上查了一个利用静态变量的做法,其中有一步是在公用类中定义全局变量和全局函数,均使用static修饰,静态变量还必须在类外定义和初始化
class CPublic //(头文件)
{
public:
CPublic();
virtual CPublic();
public: static int x;
static int time;
static int f(int y);
}
添加进去总是报错,请问下各位高手怎么回事,我确实有引用过#“Public.h”另外这个头文件是放在什么地方的

    使用静态变量来实现全局变量,在MFC程序中是很不合适的做法。而且静态变量占用程序堆内存,比较浪费。

    你的错误在于,在CPublic这个类里面声明静态变量,必须在同一个同文件中进行初始化。以提问中代码为例,需要在类声明之后加上:

    int CPublic::x = 0;

    int CPublic::time = 0;

    静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员(这点非常重要)。

    MFC中实现一个变量或者函数可以全局使用非常简单,因为APP类是一个全局类,任何APP类里面声明的函数或者变量,都可以在框架内通过AfxGetApp()-> 这个方法来访问。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-08-16
你这样定义的话,可以通过CPublic::time 这种方式调用。
然后在stdafx.h中添加头文件#include "CPublic.h"即可。

头文件中要添加
#if !defined(AFX_CPUBLIC_H__这里自己随便写_)
#define AFX_CPUBLIC_H__和上面的一样
class CPublic
{};
#endif 防止头文件被重复添加。
第2个回答  2014-08-16
LZ一定是在头文件里面定义的变量吧
全局变量的声明如果是在头文件里头,要这么写
extern int a; //声明
然后在一个cpp文件里头全局的位置再写上
int a; //这个才是实例,只能在一个cpp里面出现
这样就可以再引用该头文件的地方使用这个变量。
请采纳答案,支持我一下。追问

你的意思是这样吗
#include "stdafx.h"



extern CString a;
#endif
但是这样连最简单的赋值都会报错
a = "1";

相似回答
大家正在搜