簡體   English   中英

C++ class 中的問題與 static 變量和函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM