话说昨晚写了个Calculator,一直在纠结,为何不能够把存储number和operator的Stack声明为public static,作为一个成员变量的类型:如下面这样
//自定义的方法,最后进行对比校验
#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();
};
这样在静态方法run()里面调用static 的两个stack,编译是能通过,但连接就出问题了.
解决方案:将两个声明到Run()里面就行了...而且要去掉static关键字,不知道为什么,可能还是和自己的底层c++实现不清楚有关..
CSDN上求助:得到的结论是:静态数据成员必须在类外定义
另外附带两个问题的解释:
1.想问下,如果使用第一种方法(作为成员变量),有没有方法改正使他成为对的?
在你的cpp文件中定义这两个静态数据成员。类似这样:
LinkStack<double> myCal::numberStack;
2.第一种方法在实际中运用的多否?还是说第二种是标准的思路?
两种用法都挺常见的。没什么标准与不标准。
查了一下文档:于是就有了这篇文章: