C ++静态变量给出错误

时间:2018-02-21 01:05:11

标签: c++ oop static-variables

我正在学习C ++,并且在我正在研究的实验室中遇到一个奇怪的问题。我似乎无法正确引用的东西是我的猜测。

它基本上会抛出一个错误,就像它找不到类头文件中声明的静态int nCounters一样。

//开始使用counter.h

class Counter
{

private:
  int counter;
  int limit;
  static int nCounters;

public:
  Counter(int x, int y);
  void increment();
  void decrement();
  int getValue();
  int getNCounters();

};

// counter.h的结尾

//开始使用counter.cpp

#include "counter.h"

Counter::Counter(int x, int y)
{
    counter = x;
    limit = y;
    nCounters++;
}

void Counter::increment()
{
    if (counter < limit)
    {
        counter++;
    }
}

void Counter::decrement()
{
    if (counter > 0)
    {
        counter--;
    }
}

int Counter::getValue()
{
    return counter;
}

int Counter::getNCounters()
{
    return nCounters;
}

// counter.cpp的结尾

//开始counter_test.cpp

#include <iostream>
#include "counter.cpp"
using namespace std;
int main(){
    Counter derp(5,5);

    cout << derp.getValue();

    return 0;
}

// counter_test.cpp的结尾

2 个答案:

答案 0 :(得分:1)

您需要define static变量。 static int nCounters;只是一个声明而非定义。

像这样定义

int Counter :: nCounters;

例如

class Counter {
        private:
                static int nCounters; /*declaration */
        public:
                /* Member function of class */
};
int Counter :: nCounters;/*definition, this is must  */
int main() {
        /* some code **/
        return 0;
}

答案 1 :(得分:1)

由于此变量在所有类中都是相同的,并且在实例化Counter时与正常成员变量不同,因此您必须在代码中的某处添加以下行(最好放在counter.cpp中):

Counter::nCounters = 0;

设置定义并设置nCounters的初始值。

另一方面,#include "counter.cpp"是不好的做法。而是#include "counter.h"并将.cpp文件链接到您的可执行文件。