c++ - 具有静态变量和函数的 C++ 类中的问题

标签 c++ class 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;
        }
};

最佳答案

类定义中的语句 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

如果 FibonacciGenerator 在命名空间中声明,那么这些静态成员定义也必须在该命名空间中。

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

关于c++ - 具有静态变量和函数的 C++ 类中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7091712/

相关文章:

c++ - 在 C++ 中创建队列 - 什么是 malloc 错误?

java - 何时在匿名类中创建方法

java - 从类和 javadoc 生成代码 stub

c++ - 在 C++ 中使用私有(private)方法的属性

ubuntu - 无法连接到 http ://localhost:50030/- Hadoop 2. 6.0 Ubuntu 14.04 LTS

C++ - 宏定义指令

c++ - 将数据从较小的 vector 复制到较大的 vector

node.js - 升级时如何备份我的 Node.js 设置

ubuntu - 在ubuntu中通过终端访问无线网络

c++ - 更新 map 值