访问头文件中定义的名称空间中的元素

问题描述 投票:0回答:1

我正在尝试访问头文件中名称空间中定义的变量和函数。但是,我得到了错误:xor.cpp:(.text+0x35): undefined reference to "the function in header file" collect2: error: ld returned 1 exit status。在我看来,在阅读此post之后,编译步骤就可以了,并且还因为我可以访问此头文件中的变量,但是调用该函数将返回上述错误。我的问题是:如何从main.cpp访问名称空间中的那些函数?我究竟做错了什么 ?

我知道类的情况,但是在这里我不明白,因为我不应该创建对象,因此只需在前面调用名称空间就可以了(?)。任何帮助将不胜感激。

Main c ++

#include "neat.h"
#include <cstring>

double NEAT::trait_param_mut_prob; //NEAT is the namespace 
bool NEAT::load_neat_params(const char *filename, bool output); //function defined in the namespace 

int main(){
  const char *the_string = "test.ne";
  bool bool_disp = true;
  trait_param_mut_prob = 6.7;//works perfectly 
  load_neat_params(the_string ,bool_disp); //doesn't work
  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 

}

neat.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 
                    };

Makefile

neat.o: neat.cpp neat.h
        g++ -c neat.cpp
c++ function makefile namespaces header-files
1个回答
0
投票

您正在违反“ ODR”规则:在源文件trait_param_mut_prob中两次定义了load_neat_paramsneat.cpp,在main.cpp中定义了第二次,因此只需从main.cpp中删除这些行:]

//double NEAT::trait_param_mut_prob; //NEAT is the namespace 
//bool NEAT::load_neat_params(const char* filename, bool output); //function defined in the namespace 

并在标题#endif中添加neat.h

  • 而且函数load_neat_params不会返回bool值也是错误的。因此,使其返回truefalse
© www.soinside.com 2019 - 2024. All rights reserved.