16
#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

如何解决这些错误?

4

3 回答 3

28

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

于 2012-11-28T09:53:36.650 回答
2

YCM和clang有这个问题。原来,丢失的标志是"-x", "c++".

来自官方 clang文档

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

于 2020-07-07T12:47:26.570 回答
1

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

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

于 2018-06-27T05:57:33.807 回答