避免重新声明标头到源文件

时间:2014-10-19 01:25:06

标签: c++

假设我有两个文件foo.h和foo.cpp

foo.h中

class foo
{
    public:
        Foo(); 
        ~Foo(); 
    private:
        /*
        Member functions
        */
        static void DoThis();
        /*
        Member variables
        */
        static int x;


    protected:  
};

Foo.cpp中

#include "foo.h"

int foo::x;

void foo::DoThis()
{
    x++;
}

我可以避免再次在foo.cpp中声明每个变量的麻烦吗?如果我删除了这一行int foo::x;,我会得到未解析的外部符号的链接器错误。

有没有其他方法可以做到这一点而无需为我计划使用的每个变量键入一行?

1 个答案:

答案 0 :(得分:1)

您只需要重新声明静态变量。如果在类定义中创建一个变量而不使它们成为静态变量,您可以将它们保留在那里。例如:

foo.h中

#ifndef _FOO_H_
#define _FOO_H_

class Foo{
private:
  static int i; //Static variable shared among all instances
  int o; //Non-static variable remains unique among all instances
public:
  Foo(); //Consructor
};

#endif

Foo.cpp中

int Foo::i = 0; //Only static variables can be initialized when in a class
//No definition required for non-statics

Foo::Foo(){
  //Constructor code here
  i = 0;
};

#ifndef块可防止标题被同一源文件意外多次包含。这是因为标头包含在另一个标头中,如果这些标头不存在,可能会导致无限的包含循环并强制编译器在计算包含深度太高时退出。