带有静态变量和函数的C++类中的问题

ina*_*101 1 c++ ubuntu static g++ class

有人可以告诉我下面的课程中有什么问题,g ++在ubuntu上给出了错误:

class FibonacciGenerator
{
    private:
        static int num1, num2, counting;

    public:

        static void Reset()
        {
            num1 = 0; num2 = 1;
            counting = 1;
        }

        static int GetCount()
        {
            return counting;
        }

        static int GetNext()
        {
            int val = 0;
            if(counting == 1) val = num1;
            else if(counting == 2) val = num2;
            else 
            {
                val = num1 + num2;
                num1 = num2;
                num2 = val;
            }
            counting ++;

            return val;
        }
};

Man*_*rse 6

static int num1, num2, counting;类定义中的语句不定义那些变量,它只声明它们.如果使用它们,也必须定义它们.

一个完整的例子如下:

//Begin FibonacciGenerator.hpp
#ifndef FIBONACCI_GENERATOR_HPP
#define FIBONACCI_GENERATOR_HPP
class FibonacciGenerator
{
private:
    static int num1, num2, counting;

public:
/* as above */
};
#endif //FIBONACCI_GENERATOR_HPP
//End FibonacciGenerator.hpp

//Begin FibonacciGenerator.cpp
#include "FibonacciGenerator.h"
int FibonacciGenerator::num1;
int FibonacciGenerator::num2;
int FibonacciGenerator::counting;
//End FibonacciGenerator.cpp
Run Code Online (Sandbox Code Playgroud)

如果在命名空间中声明FibonacciGenerator,则这些静态成员定义也必须位于该命名空间中.

像这样使用静态成员可能是一个非常糟糕的主意.最好使它们成为实例变量,这样你就可以FibonacciGenerators在代码的不同部分中拥有多个独立的变量.