Я пытаюсь получить доступ к переменным и функциям, определенным в пространстве имен в заголовочном файле. Однако я получаю ошибку: xor.cpp:(.text+0x35): undefined reference to "the function in header file" collect2: error: ld returned 1 exit status
. Мне кажется, что после прочтения этого post шаги компиляции в порядке, а также потому, что я могу получить доступ к переменным в этом заголовочном файле, но вызов функции возвращает ошибку, упомянутую выше. У меня вопрос: как я могу получить доступ к этим функциям в пространстве имен с моего основного. cpp? Что я делаю неправильно ?
Случай с классом мне понятен, но здесь я не понимаю, потому что я не должен создавать объект, поэтому просто вызов переднего пространства имен должен быть в порядке (?). Любая помощь будет высоко ценится.
РЕДАКТИРОВАТЬ После изменений, предложенных Maestro, я обновил код следующим образом, но он все равно не работает. Я получаю ту же ошибку. Если я определю using NEAT::trait_param_mut_prob = 6.7;
, я получу ошибку: xor.cpp:127:36: error: expected primary-expression before ‘=’ token
Main c ++
#include "experiments.h"
#include "neat.h"
#include <cstring>
int main(){
const char *the_string = "test.ne";
bool bool_disp = true;
NEAT::trait_param_mut_prob;
trait_param_mut_prob = 6.7;
NEAT::load_neat_params(the_string ,bool_disp);
std::cout << NEAT::trait_param_mut_prob << std::endl;
return 0;
}
neat.h
#ifndef _NERO_NEAT_H_
#define _NERO_NEAT_H_
#include <cstdlib>
#include <cstring>
namespace NEAT {
extern double trait_param_mut_prob;
bool load_neat_params(const char *filename, bool output = false); //defined HERE
}
#endif
аккуратно. cpp
#include "neat.h"
#include <fstream>
#include <cmath>
#include <cstring>
double NEAT::trait_param_mut_prob = 0;
bool NEAT::load_neat_params(const char *filename, bool output) {
//prints some stuff
return false;
};
Makefile
neat.o: neat.cpp neat.h
g++ -c neat.cpp