C++ C+中的问题+;使用静态变量和函数初始化

C++ C+中的问题+;使用静态变量和函数初始化,c++,class,ubuntu,static,g++,C++,Class,Ubuntu,Static,G++,有人能告诉我以下类中的问题是什么吗,g++在ubuntu上给出了错误: class FibonacciGenerator { private: static int num1, num2, counting; public: static void Reset() { num1 = 0; num2 = 1; counting = 1; } stat

有人能告诉我以下类中的问题是什么吗,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; } }; 类光纤交流发电机 { 私人: 静态整数num1,num2,计数; 公众: 静态无效重置() { num1=0;num2=1; 计数=1; } 静态int GetCount() { 返回计数; } 静态int GetNext() { int-val=0; 如果(计数==1)val=num1; 如果(计数=2)val=num2,则为else; 其他的 { val=num1+num2; num1=num2; num2=val; } 计数++; 返回val; } };
您只声明了静态成员。您还应该像这样在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

在一个类中,它只是一个声明,但每个程序必须包含所使用的每个变量的一个定义(根据一个定义规则)。hth

您只声明了静态成员。您还应该像这样在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

在一个类中,它只是一个声明,但每个程序必须包含所使用的每个变量的一个定义(根据一个定义规则)。hth

语句
静态int num1,num2,计数不定义这些变量,它只声明它们。如果使用它们,还必须定义它们

这方面的完整示例如下:

//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

语句
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

有哪些错误?请提供您的问题的更多细节,当前形式的问题无法可靠回答。暗中猜测-您已声明变量为静态,但忘记在某个地方定义它们?还有一件事,为什么
static
呢?我想让这个类非常容易使用,而不做任何实例等。有什么错误?请提供您的问题的更多细节,当前形式的问题无法可靠回答。暗中猜测-您已声明变量为静态,但忘记在某个地方定义它们?还有一件事,为什么
static
呢?我想让这个类非常容易使用,而不需要创建任何实例等。我应该在哪里定义它们?定义类或调用类函数的文件?@inam101:通常,类定义所在的文件应该是.h文件,成员函数定义所在的文件应该是cpp文件。在这种情况下,静态成员定义应该放在cpp文件中。如果您将它们全部转储到一个文件中,那么定义应该位于类之后的任何位置我应该在哪里定义它们?定义类或调用类函数的文件?@inam101:通常,类定义所在的文件应该是.h文件,成员函数定义所在的文件应该是cpp文件。在这种情况下,静态成员定义应该放在cpp文件中。如果将它们全部转储到一个文件中,那么定义应该位于classi在Reset函数中声明变量之后的任何位置。此外,我目前只在一个地方使用该类,它用于一些测试等,因此只使用静态类,因此我认为通过不进入类实例,我会使它更简单。在
Reset
函数中,您分配给变量。这与定义它们不同,让它们成为实例变量的一个原因是这个问题会消失。这样,您就可以拥有一个完全只包含头的实现,并且不会得到未定义的引用错误。这是C++的一些限制吗?不,这不是C++的限制。你一定做错了什么。我将更新我的答案,使之更加完整。我已经在重置函数中声明了变量。此外,我目前只在一个地方使用该类,它用于一些测试等,因此只使用静态类,因此我认为通过不进入类实例,我会使它更简单。在
Reset
函数中,您分配给变量。这与定义它们不同,让它们成为实例变量的一个原因是这个问题会消失。这样,您就可以拥有一个完全只包含头的实现,并且不会得到未定义的引用错误。这是C++的一些限制吗?不,这不是C++的限制。你一定做错了什么。我将更新我的答案,使之更加完整。