一切只定义一次

时间:2016-10-29 17:31:10

标签: c++

如果我在程序中包含头文件,则会出现以下问题。 (减少帖子的长度我删除了函数的实现)

我的文件如下:

// The main file: cturing.cpp
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <time.h>

#include "rule.h"
#include "rekurzio.h"


int main(){
}

/////////////////////////////
// rule.h
#ifndef RULE_H
#define RULE_H

struct rule{
    char kallapot,kjel;
    char vallapot,vjel,velmozdulas;
};

rule getRuleFromString(std::string line){
}   

bool addRule(rule szabaly, rule *szabalyok, int &ruleNo){
}

#endif

////////////////////////////
// rekurzio.h

#ifndef REKURZIO_H
#define REKURZIO_H

#include "rule.h"

void startRekurzio(rule*);

#endif

////////////////////////////
// rekurzio.cpp

#include <string>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include "rekurzio.h"

void getOptions(rule *options,rule *szabalyok, char allapot, char betu, int &j){
}

int getHely(int curr, char direction, std::string &comb){

}

bool realRekurzio(char &allapot, int hely, std::string combination, rule *szabalyok){
}

void nextCombination(std::string combination){
}

void startRekurzio(rule *szabalyok){
}

如果我尝试编译程序,我收到此错误:

$ g++ cturing.cpp rekurzio.cpp
/tmp/cchzIu1i.o: In function `getRuleFromString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
rekurzio.cpp:(.text+0x0): multiple definition of `getRuleFromString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
/tmp/ccHXKygG.o:cturing.cpp:(.text+0x0): first defined here
/tmp/cchzIu1i.o: In function `addRule(rule, rule*, int&)':
rekurzio.cpp:(.text+0x118): multiple definition of `addRule(rule, rule*, int&)'
/tmp/ccHXKygG.o:cturing.cpp:(.text+0x118): first defined here
collect2: error: ld returned 1 exit status

当一切只定义一次时,什么可能导致多重定义错误?

我有更多文件,如果我包含它们......嗯,我有更多的错误信息。

另一方面,如果我不包含rekruzio.h文件(并删除来自此文件的函数调用),但仍然将rekurzio.cpp添加到编译器,它仍然存在这个问题。你可以看到每个头文件都有#ifndef / #define / #endif预处理器指令。

使用删除的rekurzio.h导入编译后,只有主文件(cturing.cpp)一切正常。

0 个答案:

没有答案