我知道这个问题已被要求死亡,但我做了大量研究,到目前为止没有任何帮助。是的我有很多很多的标题保护没有我知道没有什么需要内联的每个功能都在一个类中。我有一个encoderrunner.cpp,其中包括encoder.h和decoder.h,encoder.h和decoder.h都包含FrequencyTable.h,而且这一切都破坏了,编译器说FrequencyTable中的所有内容都是重新定义。这是许多其中之一恰好来自与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
EDIT1:
#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;
请告诉我您需要的其他信息
答案 0 :(得分:0)
我感觉它与编辑有关,但感谢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这样的东西吗?这是因为他们使用内联或模板,任何人都可以将我链接到可以解释这一点的东西,或者自己解释一下吗?