C ++: у меня есть этот класс конфигурации, который я хочу использовать между всеми моими файлами CPP, как мне его инициализировать? - PullRequest
2 голосов
/ 01 апреля 2011
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.

EDIT: У меня проблемы с компиляцией:

В моем файле 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 ]

8 голосов
/ 01 апреля 2011

Заголовок (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;
...
0 голосов
/ 01 апреля 2011

Возможно, вы захотите реализовать свой класс Config как singleton .

О, и если вы хотите установить OUTPUT_TO_FILE = true, вам лучше объявить OUTPUT_TO_FILE какbool ...

0 голосов
/ 01 апреля 2011

Поскольку у класса есть только статика, вы должны иметь доступ к ним в любом файле, который включает этот заголовок, например ..

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.
0 голосов
/ 01 апреля 2011

В один из ваших исходных файлов добавьте что-то вроде этого:

int Config::OUTPUT_TO_FILE = 1;

Теперь оно будет инициализировано при запуске программы.Делайте это только в одном исходном файле .cpp, а не в нескольких.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...