首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

【编译无误,连接异常】类定义中不能声明静态成员static linkStack链表?

2012-04-10 
【编译无误,连接错误】类定义中不能声明静态成员static linkStack链表?!话说昨晚写了个Calculator,一直在纠

【编译无误,连接错误】类定义中不能声明静态成员static linkStack链表?!
话说昨晚写了个Calculator,一直在纠结,为何不能够把存储number和operator的Stack声明为public static,作为一个成员变量的类型:如下面这样

C/C++ code
#ifndef __MYCAL_H__#define __MYCAL_H__#include "lk_stack.h"//主要实体类class myCal{private:    static bool ISsymbol(char ch);    static char Precede(char symbol1,char symbol2);    static double Cal(double left,char symbol,double right);    static void Get2number(double &left,double&right,LinkStack<double>&);    static LinkStack<double> numberStack;//编译通过,连接出错    static LinkStack<char> symbolStack;//编译通过,连接出错public:    myCal(){};    virtual ~myCal(){};    static void Run();};


编译通过,连接时:
1>正在链接...
1>main.obj : error LNK2001: 无法解析的外部符号 "private: static class LinkStack<double> myCal::numberStack" (?numberS@myCal@@0V?$LinkStack@N@@A)
1>D:\DEEDEE\calculator\Debug\calculator.exe : fatal error LNK1120: 1 个无法解析的外部命令



解决的方法是:将numberStack和symbolStack放到Run方法中进行局部定义.(书上的代码)
下面这样:(运行成功)
C/C++ code
void myCal::Run(){    LinkStack<char> symbolStack;    LinkStack<double> numberStack;    symbolStack.Push('=');


网上查阅了资料,按理说如果定义了两个成员stack的变量,声明为static应该是在c++的静态(全局)区域中,既不是堆区域,也非栈区域中..

1.想问下,如果使用第一种方法(作为成员变量),有没有方法改正使他成为对的?
2.第一种方法在实际中运用的多否?还是说第二种是标准的思路?

请教前辈么啦!~

[解决办法]
静态数据成员必须在类外定义。

热点排行