读书人

static的有关问题

发布时间: 2012-03-09 21:42:54 作者: rapoo

static的问题
work.h

class CWork
{
public:
CWork(void);
~CWork(void);
void GetUrl();

static list <string> listUrl;
};


work.cpp

CWork::CWork(void)
{
}

CWork::~CWork(void)
{
}

void CWork::GetUrl()
{
CGetUrlFile urlFile;
CWork::listUrl = urlFile.GetUrl();
}

编译不通过,提示listUrl无法解析的外部符号


[解决办法]
在work.cpp里加一行
static CWork::list <string> listUrl;

编译不通过,提示listUrl无法解析的外部符号
--------
楼主注意,这个提示是链接程序报的,是链接不通过,而不是编译。
[解决办法]
#include <list>
#include <string>
using namespace std;

类外
list <string> CWork::listUrl;
[解决办法]
//work.h
#ifndef CWORK_H_
#define CWORK_H_
#include <list>
#include <string>
using namespace std;

class CWork
{
public:
CWork(void);
~CWork(void);
void GetUrl();

static list <string> listUrl;
};
#endif

//work.cpp
#include "work.h "
CWork::CWork(void)
{
}

CWork::~CWork(void)
{
}

void CWork::GetUrl()
{
CGetUrlFile urlFile;
CWork::listUrl = urlFile.GetUrl();
}
[解决办法]
//work.h
//-------
#ifndef CWORK_H_
#define CWORK_H_
#include <list>
#include <string>
using namespace std;

class CWork
{
public:
CWork(void);
~CWork(void);
void GetUrl();

static list <string> listUrl;
};
#endif

//work.cpp
//--------
//work.cpp
#include "work.h "

list <string> CWork::listUrl;

CWork::CWork(void)
{
}

CWork::~CWork(void)
{
}

void CWork::GetUrl()
{
CGetUrlFile urlFile;
CWork::listUrl = urlFile.GetUrl();
}

[解决办法]
class的static成员变量,需要在class之外单独再定义一次
[解决办法]
楼上几位说得对,static成员变量在类构造前就已经存在了,所以,必须在cpp文件中函数外的任意位置进行初始化,或者在main函数中,你定义那个类之前,先初始化它的static成员变量。

另外一点我没看明白,你的listUrl变量是个list <String> ,你的用的直接赋值,是不是应该用list自带的添加函数(可能是add之类的)啊。。。


[解决办法]
要把静态成员的声明放在CPP文件当中.

work.cpp


#include "work.h "
list <string> CWork::listUrl;

读书人网 >C++

热点推荐