如何修复错误:未知类型名称'命名空间'

时间:2012-11-28 09:51:48

标签: c++

#ifndef UNO_ACTION_ 
#define UNO_ACTION_
namespace Uno
{
namespace Game
{
    class Game;
}
} // namespace

namespace Uno
{
namespace Action
{
using ::Uno::Game::Game;

class Action
{
public:
    virtual bool isDisposeable() = 0;
    virtual void takeAction(Game* game) = 0;
    virtual ~Action() {}
};

}
}
#endif

我在ubuntu 12.04上编译代码并返回错误集:

action.h:4:1: error: unknown type name ‘namespace’
action.h:4:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
action.h:8:1: error: unknown type name ‘namespace’
action.h:8:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token

我不知道如何解决这些错误。

3 个答案:

答案 0 :(得分:18)

听起来您正在尝试使用C编译器编译C ++代码。尝试使用g++代替gcc并为您的文件提供C ++扩展名,例如.cpp(而不是.c)。

答案 1 :(得分:1)

YCM和clang出现此问题。原来,丢失的标志是"-x", "c++"

来自官方c语documentation

-x <语言>:将后续输入文件视为具有语言类型。

答案 2 :(得分:0)

我有一个类似的问题,发现了这个问题,但是解决方案与我的不完全匹配,所以我在这里添加我的。

就我而言,我在.cpp文件和.c文件中包含头文件。 解决方案是拆分标头的名称空间部分,因为显然仅在.cpp文件中需要。