C ++:我想在所有CPP文件之间使用这个配置类,如何初始化它?

时间:2011-04-01 14:12:20

标签: c++

class Config
{
    public:

        static int OUTPUT_TO_FILE;
        static int NEED_TO_TRAIN;
        static int NO_FILE_TRAIN;
        static int NEED_TO_TEST;
}

上面是我的header.h文件(我跟着:http://weblogs.asp.net/whaggard/archive/2004/11/05/252685.aspx

我希望能够做像Config.OUTPUT_TO_FILE = true或variable = Config.NO_FILE_TRAIN;

这样的事情

来自任何包含config.h的文件

我想要做的就是清楚,只想在我的所有cpp文件中共享一些变量。

编辑: 我在编译时遇到了问题:

在我的make文件中,我添加了:

hPif : src/main.o src/fann_utils.o src/hashes.o src/config.o # added the config part
    g++ src/main.o src/fann_utils.o src/hashes.o src/config.o -lfann -L/usr/local/lib -o hPif

config.o : src/config.cpp src/config.h
    g++ -c src/config.cpp

.
.
.
main.o: src/main.cpp src/config.h src/main.h src/hashes.h
    g++ -c src/main.cpp

config.cpp:

#include "config.h"

int OUTPUT_TO_FILE = false;
.
.
.

的config.h:

class Config
{
    public:

        static int OUTPUT_TO_FILE;
.
.
.

试图通过以下方式致电:

#include "config.h"
...

            Config::OUTPUT_TO_FILE = true;

我得到错误:

Undefined Symbols:
  "Config::OUTPUT_TO_FILE", referenced from:
      _main in main.o
      _main in main.o

4 个答案:

答案 0 :(得分:8)

标题(Config.h):

#pragma once

class Config
{
public:
  static int OUTPUT_TO_FILE;
  static int NEED_TO_TRAIN;
  static int NO_FILE_TRAIN;
  static int NEED_TO_TEST;
};

来源(Config.cpp):

#include "Config.h"

int Config::OUTPUT_TO_FILE = 0;
int Config::NEED_TO_TRAIN = 0;
int Config::NO_FILE_TRAIN = 0;
int Config::NEED_TO_TEST = 0;

用法(any.cpp):

#include "Config.h"

...
int variable = Config::OUTPUT_TO_FILE;
...

答案 1 :(得分:0)

在您的某个源文件中,添加以下内容:

int Config::OUTPUT_TO_FILE = 1;

现在,它将在程序启动时初始化。只在一个源.cpp文件中执行此操作,而不是多个。

答案 2 :(得分:0)

因为类只有静态,所以你应该可以在包含这个标题的任何文件中访问它们,例如..

Foo.cpp中

#include "Config.h"

void bar()
{
  Config::NO_FILE_TRAIN = 0; // set this value for example
}

bar.cpp

#include "Config.h"

void foo()
{
  Config::NEED_TO_TRAIN = 1; // set this value for example
}

请记住,您必须有一个实际文件,该文件也经过编译,实际上定义了静态,即

Config.cpp

int Config::OUTPUT_TO_FILE = 0; // initial value
:  //etc.

答案 3 :(得分:0)

您可能希望将您的Config类实现为singleton

哦,如果你想设置OUTPUT_TO_FILE = true,最好将OUTPUT_TO_FILE声明为bool ......