2012-07-05 33 views
0

我有一箇舊的基於MFC的C++項目,我試圖在Linux上使用g ++編譯Eclipse(Centos 6.2)。 我發現了以下錯誤的頭文件:在Linux下的MFC頭文件g ++:期望'{'之前'<'令牌

RawData.h:54: error: expected template-name before ‘<’ token 
RawData.h:54: error: expected ‘{’ before ‘<’ token 
RawData.h:54: error: expected unqualified-id before ‘<’ token 

這是有問題的頭文件的一部分(從第54行):

class CRawDayData: public CArray<CRawQHData*,CRawQHData*> 
{ 
public: 
    CRawDayData(); 
    virtual ~CRawDayData(); 

public: 
    tm m_tmDate; 

}; 

我想這個問題因爲我在Linux上並沒有使用MFC的afx東西,所以與CArray有關。有什麼想法嗎?

+0

編譯器根本不知道什麼是'CArray'是,因此錯誤消息。如果它是一個「基於MFC」的項目,就像你自己說的那樣,那麼你將需要Linux上的MFC。 'CArray'是MFC的一部分。那麼,你打算怎麼做呢?端口MFC到Linux? – AnT

+0

是的,我將Windows程序移植到Linux。我只需要將Linux配置爲CArray,並且需要適當的頭文件語法。傾向於STL std :: vector。 – user1502835

回答

1

所有的MFC東西都只有Windows,所以它們在Linux上不可用。您必須轉換爲使用一些跨平臺或Linux特有的庫,如STL,wxWidgets的,等

2

如果這是你得到的唯一錯誤,我會建議其相當於STL的std ::向量更換CARRAY。如果MFC或Windows API被廣泛使用,最好嘗試對Winelib進行編譯。

參見:Run MFC Program on Linux

使用STL,你可以這樣寫:

#include<vector> 

class CRawDayData: public vector<CRawQHData*> 
{ 
public: 
    CRawDayData(); 
    virtual ~CRawDayData(); 

public: 
    tm m_tmDate; 

}; 
+0

感謝您的回答,在我看來,STL將是轉換的最佳途徑。那麼,我將如何在STL中做到這一點?在頭文件中用std :: vector替換CArray的正確語法是什麼? – user1502835

+0

請仔細閱讀文檔。 http://www.cplusplus.com/reference/stl/vector/ –

+1

順便說一下,STL容器並不是來源於它們,它們是用來作爲你創建的任何類的組件(即成員),或者只是使用矢量作爲獨立變量。從標準容器派生的問題是沒有std :: vector或任何標準容器類的虛擬析構函數。 –

相關問題