2011-11-30 68 views
0

我有一個奇怪的問題,我不明白。我正在複製一些C代碼到一個C++類,並且不能通過這個錯誤「不命名一個類型」...我希望我複製足夠的代碼,這是有道理的,原始程序是〜1000行錯誤:'xxx'未命名類型

錯誤是...錯誤: 'HttpContext的' 沒有指定類型

錯誤的行是 「HttpContext的主窗口:: * find_rtp_session_with_url(爲const char * URL,爲const char * SESSION_ID)

類名。 h:

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 

    typedef struct HTTPContext{ 
     int fd; 
    }HTTPContext; 

    HTTPContext *find_rtp_session_with_url(const char *url, 
               const char *session_id); 
}; 

className.cpp

#include "className.h" 

HTTPContext MainWindow::*find_rtp_session_with_url(const char *url, 
              const char *session_id) 
{ 
    HTTPContext *rtp_c; 

} 

回答

5

HTTPContext在班級範圍內聲明的,所以要在全球範圍內的函數定義使用你需要明確指定:

MainWindow::HTTPContext *MainWindow::find_rtp_session_with_url... 
+0

這對於擺脫那個錯誤,但現在在find_rtp_session_with_url函數「錯誤:'HTTPContext'沒有在此範圍內聲明... – JonnyCplusplus

+0

你確定代碼是完全一樣的嗎?也就是說,該函數是,實際上,'MainWindow :: find_rtp_session_wirh_url'並且你使用'HTTPContext'呢? –

+0

找出來:)你是對的 – JonnyCplusplus

2

你需要說

MainWindow::HTTPContext* MainWindow::find_rtp_session_with_url(... 

因爲它是一個內部類。你也不必使用typedef有:

struct HTTPContext { 
    int fd; 
}; 

足以命名C++中的類型。