2011-11-24 100 views
0

這是從屬類頭C++構造繼承工作不正常

#ifndef TransHeader 
#define TransHeader 
#include <string> 
#include "CipherHeader.h" 

using namespace std; 
class Trans : public Cipher { 
    public: 
    Trans(string filenameIn); 
    const static int MAXSIZE = 10000; 
    void createArray(); 
    void transEncrypt(); 
    void transDecrypt(); 


    private: 
     //string Key; 
     //string inputData; 
     char dataArray[MAXSIZE][MAXSIZE]; 


}; 

#endif 

這是繼承報頭

#ifndef CipherHeader 
#define CipherHeader 
#include <string> 
using namespace std; 

class Cipher { 
    public: 
     const static int MAXSIZE = 10000; 
     Cipher(string filenameIn); 
     void getKey(); 
     void flagHandle(string); 
     string Key; 
     string inputData; 
     string filename; 
     string flags; 

     string readFile(); 
     void writeFile(); 
    private: 




}; 

#endif 

問題是後我調用基構造

Trans::Trans(string filenameIn) : Cipher(filenameIn) {} 

我不能像這樣在普通文件中調用構造函數:

#include "Trans.cpp" 

int main() { 
string a = "asdf"; 
Trans *c = new Trans(a); 

} 

這導致了這個錯誤:

g++ test.cpp -o test.out 
/tmp/ccbuqMYr.o: In function `Trans::Trans(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)': 
test.cpp:(.text+0x35): undefined reference to `Cipher::Cipher(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)' 
/tmp/ccbuqMYr.o: In function `Trans::Trans(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)': 
test.cpp:(.text+0xa5): undefined reference to `Cipher::Cipher(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)' 
collect2: ld returned 1 exit status 

用密碼代替反式工作得很好,並運行。我嘗試了我所知道的一切,過度搜索,無法弄清楚這個錯誤。其他設計問題等將在稍後處理,這是我的主要問題。請幫忙。

編輯::密碼

Cipher::Cipher(string filenameIn) { 

filename = filenameIn; 

readFile(); 
getKey(); 

} 
的定義
+4

這是一個鏈接錯誤。你要麼錯過了'Cipher :: Cipher()'或者定義所在的'.cpp'文件的定義。 – iammilind

+0

響應很遲,但如果我沒記錯的話,這個人解決了我的問題。 –

回答

1

你需要構建的所有源文件:

g++ test.cpp trans.cpp cipher.cpp -o test 

這會給你一個新的錯誤,因爲你包括test.cpptrans.cpp源文件,而比頭文件 - 修復,並應該建立沒有進一步的問題。

+0

這工作,現在我只是處理分段錯誤,這是我懷疑的另一個問題!謝謝! –

+0

用測試文件中的密碼代替Trans,運行時沒有分段錯誤...如果您有任何想法,爲什麼,我將不勝感激 –

+0

修復了您的幫助,非常感謝 –

3

確定規則1 - 永遠不把「使用」的語句在一個頭文件! ;-)

好的,你需要調用基類的構造函數。

所以:

Trans::Trans(const std::string &f) // notice pass by reference 
    :Cipher(f) 
{ 
} 
+0

對不起,我不知道如何解決這個問題。我試圖從用戶使用cin檢索字符串,但沒有奏效。 –

+0

進行更改後,我得到了同樣的錯誤 –

+0

嘗試的#include 的#include Base類 { 市民: 基地(常量的std :: string&F) :m_name(F) {} private: std :: string m_name; }; 類DERIV:公共基地 { 公共: DERIV(常量的std :: string&F) :基礎(F) { } }; int main(int argc,char * argv []) { Deriv f(「foobar」); return 0; } –