[英]Problem in C++ class with static variables and functions
有人可以告诉我以下 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;
在 class 定义中没有定义这些变量,它只声明它们。 如果它们被使用,它们也必须被定义。
一个完整的例子如下:
//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 在命名空间中声明,则这些 static 成员定义也必须在该命名空间中。
像这样使用 static 成员可能是一个非常糟糕的主意。 最好将它们设为实例变量,这样您就可以在代码的不同部分拥有多个独立的FibonacciGenerators
。
您只声明了 static 成员。 您还应该像这样在 cpp 文件中定义它们
int FibonacciGenerator::num1 /*= 0*/;
int FibonacciGenerator::num2 /*= 1*/;
int FibonacciGenerator::counting /*= 0*/;
当你写
static T v; //if static were removed, this would also be a definition
在 class 中,它只是一个声明,但每个程序都必须包含所使用的每个变量的一个定义(根据 One-Definition-Rule)。 hth
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.