我知道这个问题已经死了,但是我已经做了相当多的研究,到目前为止没有任何帮助。是的,我有很多头文件保护程序。据我所知,不需要内联每个函数都在一个类中。我有一个coderrunner.cpp,其中包括encoder.h和decoder.h,encoder.h和decoder.h都包含了频率表.h,这是所有事情都破灭的地方,编译器说,频率表中的所有内容都是重新定义的。这是恰好来自于我与FrequencyTable分离的类中的一种
/home/sersay/Documents/ECS60/p4/FrequencyNode.cpp:10: multiple definition of `FrequencyNode::FrequencyNode(unsigned char, FrequencyNode*, FrequencyNode*)'
decoder.o:/home/sersay/Documents/ECS60/p4/FrequencyNode.cpp:10: first defined here
等等...
我可以提供更多代码,但我不认为它完全相关,也许这是我正在编译的方式?
encoder.out : decoder.o encoder.o encoderRunner.o
g++ -ansi -Wall -g -o encoder.out decoder.o encoder.o encoderRunner.o
decoder.o : decoder.cpp decoder.h
g++ -ansi -Wall -g -c decoder.cpp
encoder.o : encoder.cpp encoder.h
g++ -ansi -Wall -g -c encoder.cpp
encoderRunner.o : encoderRunner.cpp CPUTimer.h encoder.h decoder.h
g++ -ansi -Wall -g -c encoderRunner.cpp
clean :
rm -f encoder.out decoder.o encoder.o encoderRunner.o
编辑1:
#pragma once
#ifndef FrequencyTable_H_
#define FrequencyTable_H_
#include "FrequencyNode.h"
//class FrequencyNode;
class FrequencyTable
{
private:
FrequencyNode *HighestNode;
FrequencyNode *LowestNode;
public:
FrequencyTable();
~FrequencyTable();
FrequencyNode * insert(unsigned char symbol); //USE THIS for new values in hash
unsigned char * GetOrder();
};
//#include "FrequencyTable.cpp"
#endif
Edit2(Ed的请求):
#include "FrequencyTable.h"
#include "FrequencyNode.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
请让我知道您还需要什么其他信息
最佳答案
我感觉到它与编译有关,但是由于Orbit中的@Lightness Races和@πάνταῥεῖ,我将我的makefile重写为
encoder.out : FrequencyNode.o FrequencyTable.o decoder.o encoder.o encoderRunner.o
g++ -ansi -Wall -g -o encoder.out FrequencyTable.o FrequencyNode.o decoder.o encoder.o encoderRunner.o
FrequencyNode.o : FrequencyNode.cpp FrequencyTable.h
g++ -ansi -Wall -g -c FrequencyNode.cpp
FrequencyTable.o : FrequencyTable.cpp FrequencyTable.h FrequencyNode.h
g++ -ansi -Wall -g -c FrequencyTable.cpp
decoder.o : decoder.cpp decoder.h FrequencyTable.h FrequencyNode.h
g++ -ansi -Wall -g -c decoder.cpp
encoder.o : encoder.cpp encoder.h FrequencyTable.h FrequencyNode.h
g++ -ansi -Wall -g -c encoder.cpp
encoderRunner.o : encoderRunner.cpp CPUTimer.h encoder.h decoder.h FrequencyTable.h FrequencyNode.h
g++ -ansi -Wall -g -c encoderRunner.cpp
clean :
rm -f encoder.out FrequencyTable.o FrequencyNode.o decoder.o encoder.o encoderRunner.o
话虽这么说,我知道您不必专门编译iostream和stdlib.h之类的东西?是因为他们使用内联还是模板,任何人都可以将我链接到可以对此进行解释或自己进行解释的内容吗?
关于c++ - header 多重重新定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30357636/