我正在学习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的结尾
答案 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
文件链接到您的可执行文件。