2015-05-20 62 views
-3

我明白這個問題已被要求死亡,但我已經做了大量的研究,目前爲止沒有任何幫助。是的,我有很多很多的標題守衛沒有,據我所知,沒有什麼需要內聯每個功能都在一個類中。我有一個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 

等分離類...

  • 我有/加護頭包括嘗試的#pragma一次
  • FrequencyTable本來是一個嵌套類,所以我試圖將它分爲兩​​類,仍然是相同的錯誤
  • 我確實有功能以外的類,但它們不存在於我的FrequencyTable類或其他類我從它分開

我可以提供更多的代碼,但我不相信它完全相關,也許這是我如何編譯它?

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; 

請讓我知道你需要什麼其他信息

+6

您可以創建一個展現此行爲的[SSCCE](http://sscce.org)嗎? – NathanOliver

+5

這不是你真正的代碼,因爲你甚至沒有_built_'FrequencyNode.cpp'。或者你是否將它包含在標題中?別。 –

+2

它看起來像你的一個文件是#include-FrequencyNode.cpp。你絕對不想那樣。 – Erik

回答

0

我感應到這不得不做編譯但感謝@Lightness在Orbit的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這樣的東西嗎?這是因爲他們使用內聯還是模板,任何人都可以將我鏈接到可以解釋這一點或自行解釋的東西?