在创建对象C ++之前设置静态变量

时间:2014-03-23 18:01:25

标签: c++ class

在创建对象之前,我需要将static int number设置为零(0)。

在main.cpp中,调用函数A::resetNumber()

在a.h中有私有:(static int number) 内联函数:static void resetNumber() { number = 0; }

但结果:

/tmp/ccXtEOHO.o: In function `Treadmill::resetNumOfTreadmills()':
main.cpp:(.text._ZN9Treadmill20resetNumOfTreadmillsEv[_ZN9Treadmill20resetNumOfTreadmillsEv]+0x6): undefined reference to `Treadmill::numOfTreadmills'
/tmp/ccFNFppU.o: In function `Treadmill::Treadmill()':
treadmill.cpp:(.text+0x231): undefined reference to `Treadmill::numOfTreadmills'
treadmill.cpp:(.text+0x240): undefined reference to `Treadmill::numOfTreadmills'
treadmill.cpp:(.text+0x249): undefined reference to `Treadmill::numOfTreadmills'
collect2: error: ld returned 1 exit status

3 个答案:

答案 0 :(得分:0)

您需要在源文件中定义静态变量。例如:

在标题中:

#pragma once
static int number; // only a declaration!
void resetNumber() { number = 0; }

来源:

int number = 0; // definition!

另一种方法:

有时这也可能是一个选择:

inline int& AccessStaticNumber() {
    static int number = 0;
    return number;
}

此方法仅需要标题。您可以使用它,例如:

AccessStaticNumber() = 0;
int q = 3*AccessStaticNumber();

答案 1 :(得分:0)

你可以做得更简单

头文件中的

class A
{
public:
  static int a;
  static void setA(int a);
  static void resetA();
};

在cpp文件中

int A::a=0;

void A::setA(int a)
{
    this->a=a;
}


void A::resetA()
{
    a=0;
 }

要使用此变量,您只需使用A::a;

调用它

这种初始化发生在主要发生之前

您还可以更改通过

的值
A::resetA();

答案 2 :(得分:0)

标头只定义类的定义,您仍然需要为成员分配一些存储空间。

通常,对于非静态成员,对new(或堆栈上的alloc)的调用将创建此存储。由于静态对所有实例都是“全局的”,因此您无法以这种方式分配它们,因此您必须手动定义某个存储 - 在某个源文件中。