Неопределенные символы при связывании с g ++? Как мне это решить? - PullRequest
1 голос
/ 01 апреля 2011

мой make-файл:

all: hPif clean

hPif : src/main.o src/fann_utils.o src/hashes.o src/Config.o
    g++ src/Config.o src/main.o src/fann_utils.o src/hashes.o  -lfann -L/usr/local/lib -o hPif

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

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

fann_utils.o: src/fann_utils.cpp fann_utils.h src/Config.h src/hashes.h
    g++ -c src/fann_utils.cpp 

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

clean: 
    rm -rf src/*o
    rm -rf *o

ошибка, которую я получаю при make:

g++ src/Config.o src/main.o src/fann_utils.o src/hashes.o  -lfann -L/usr/local/lib -o hPif
Undefined symbols:
  "Config::NO_FILE_TRAIN", referenced from:
      _main in main.o
      _main in main.o
  "Config::LEARNING_RATE", referenced from:
      display_help()     in main.o
      train_network_no_file()     in main.o
      train_network()     in main.o
      _main in main.o
.
.
.

подробности о расположении кода здесь: C ++: у меня есть этот класс конфигурации, которыйЯ хочу использовать между всеми своими файлами CPP, как мне его инициализировать?

РЕДАКТИРОВАТЬ:

код, имеющий проблемы здесь: http://pastebin.com/PDmHaDaC

Ответы [ 2 ]

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

Я отсылаю вас к принятому ответу в другой вопрос , где статические переменные определены правильно:

Источник (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;

Обратите внимание на квалификацию Config:: для переменных.

Сравните это со своей страницей для пасты: http://pastebin.com/PDmHaDaC

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

Вы только что изучили из своего другого вопроса теорию о том, как обрабатывать эти статические переменные-члены.Вместо того, чтобы сразу пытаться зацепить их в большую кодовую базу, попробуйте заставить их работать в маленькой;напишите helloWorld, который их использует, просто main.cpp, который определяет эти переменные, изменяет их и распечатывает.Как только это сработает, вы можете переместить определение в Config.cpp, а когда это сработает, вы сможете интегрировать эти переменные в свой проект.

РЕДАКТИРОВАТЬ:
Вотбеда:

int NO_FILE_TRAIN = false;

должно быть

int Config::NO_FILE_TRAIN = false;
...