谁能告诉我下面的类(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/