2009-12-19 108 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