2013-02-22 81 views
-2

我想将C++代码与awesomium功能集成,但是我得到了很多错误。 似乎VisualStudio不喜欢我的WebCore元素的定义/声明。我从http://wiki.awesomium.com/tutorials/tutorial-1-hello-awesomium.html复制它。 我已经简化了代码,直到这个,我仍然得到错误。Awesomium C++:语法错误:缺少';'之前'*'

SimpleClass.cpp:

#include <Awesomium/WebCore.h> 
include "SimpleClass.h" 
using namespace Awesomium; 

CSimpleClass::CSimpleClass(){ 
    WebCore *web_core = WebCore::Initialize(WebConfig()); 
} 
CSimpleClass::~CSimpleClass(){ 
} 

SimpleClass.h:

class CSimpleClass 
{ 
public: 
    CSimpleClass(void); 
    ~CSimpleClass(void); 
    WebCore *web_core; 
}; 

谢谢!

+4

使用命名空间不会神奇地将它自己应用于您的头文件。 – 2013-02-22 11:45:33

+5

避免在头文件中使用'using namespace'。 – aggsol 2013-02-22 11:46:20

回答

3

更改您的SimpleClass.h标题为:

#pragma once 
#ifndef SIMPLECLASS_H 
#define SIMPLECLASS_H 

// forward declarations 
namespace Awesomium{ 
class WebCore; 
} 

class CSimpleClass 
{ 
public: 
    CSimpleClass(void); 
    ~CSimpleClass(void); 
    Awesomium::WebCore *web_core; 
}; 

#endif /* SIMPLECLASS_H */ 

这样,你宣布你的编译器,存在着在命名空间Awesonium类型WebCore,然后你可以用它来声明成员指针CSimpleClass::web_core

+0

根据OP的包含顺序,前向声明是不必要的,因为编译器在包含SimpleClass.h之前已知道WebCore – badgerr 2013-02-22 12:08:45

+0

@badgerr理想情况下,头是自包含的,不依赖于包含其他文件中的顺序。 – molbdnilo 2013-02-22 12:29:11

+0

@badgerr是真的,但包括订单是在寻求麻烦。正如molbdnilo指出的,标题应始终保持独立。这就是为什么在'* .cpp'文件中应该总是包含相应的头* *,然后只包含实现所需的头文件。因为如果在程序的其他位置包含标题,则缺少'Awesomium/WebCore.h'标题。 – 2013-02-22 12:37:07

0

不考虑潜在的依赖性问题,问题是您的头文件不知道您想要使用Awesomium命名空间。

要么(首选)是做

class CSimpleClass 
{ 
public: 
    CSimpleClass(void); 
    ~CSimpleClass(void); 
    Awesomium::WebCore *web_core; //note the use of Awesomium:: 
}; 

(如果你真的必须)包括你使用的指令后,你的头在你的定义* web_core标题明确

#include <Awesomium/WebCore.h> 
using namespace Awesomium; 
#include "SimpleClass.h" 
相关问题