2009-12-19 114 views
0
//portl.cpp 
namespace FAWN { 
namespace Sys{ 

class PortListner { 

.... 
Connecter::ConPtr _cur_con; - the main problem is here 

...C++命名空間trobles

//con.cpp 
namespace FAWN { 
namespace Sys { 

class Connecter { 

..... 
public: 

typedef boost::shared_ptr<Connecter> ConPtr; 

...

此外,portl.cpp文件包括到一些其它 「主」 SOURSE文件。而這個「other-main」文件也包含con.cpp。所以如果我將con.cpp包含在portl.cpp中 - 我定義了兩次Connecter(在portl和main中)。如果我不包含它,compilator不知道Connecter :: ConPtr(或FAWN :: sys :: Connecter :: ConPtr)意味着什麼,並嘗試將它用作方法的defenition。

+1

你包括其它'.cpp'文件'.cpp'文件?你有頭文件嗎?另外,什麼是實際的錯誤? – GManNickG 2009-12-19 22:22:33

+0

下次嘗試在您的問題上投入更多精力(或者,甚至更好,您可以編輯它)。使用「代碼」按鈕來格式化代碼而不是「引用」,即使英語不是您的第一語言,也儘可能地盡力解釋您自己;現在你的問題不容易理解。 – 2009-12-19 22:23:44

+0

這樣更好嗎? – 2009-12-19 22:32:05

回答

2

class Connecter(您應該將其重命名爲Connector)放入頭文件(.h而不是.cpp)中,並將包含防護添加到文件中。也就是說,在你con.h文件的開頭,加線

#ifndef CON_H_INCLUDED 
#define CON_H_INCLUDED 

,並在最後,添加行

#endif 

這樣一來,即使你#includecon.h兩次,第二次它將不會被讀取,因爲第一次定義了符號CON_H_INCLUDED,所以#ifndef-#endif對隱藏了內容。

這是C++的常用方法:將.h文件中的類聲明置於文件中,.cpp然後實際定義函數。

+0

我已經將我的sourse分解成定義和decloration(我希望它的這種方式用英語)。 主要的問題是我需要將它包含在portlistner.h中 - 否則它將不會找到連接器(謝謝...我會改變)作爲一個類。並告訴我,連接器不是名稱或類名。 – 2009-12-19 22:42:30

+0

您是否添加了包含守衛?因爲在添加完這些後,你可以在沒有雙精度定義的情況下,將'con.h'包含到你的'portl.cpp'中(或者,如果你已經把這些聲明拆分出來,那麼可能是'portl.h'),即使你以後包含'con .h'在你已經包含'portl.h'的文件中。 – JaakkoK 2009-12-19 22:46:34

+0

我一直在寫一篇很長的評論,感謝但互聯網關閉,儘管它離開.. 感謝jk,Igor Zevaka和goldPseudo。 – 2009-12-19 22:58:08

1

下面是它應該如何看:

#ifndef PORTAL_H 
#define PORTAL_H 
#include "con.h" 
//portl.h 
namespace FAWN { 
namespace Sys{ 

    class PortListner { 

.... 
    //might need to specify Connector's namespace fully here 
    FAWN::Sys::Connecter::ConPtr _cur_con; 
... 
    }; 
} 
#endif //PORTAL_H 

//con.h 
#ifndef CON_H 
#define CON_H 
namespace FAWN { 
namespace Sys { 

    class Connecter { 

    ..... 
    public: 

    typedef boost::shared_ptr<Connecter> ConPtr; 

    }; 
} 
#endif //CON_H