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
答案 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
......