C++数组初始化器。使用枚举类型

3
class ARouter {
    enum directions {north, neast, east, seast, south, swest, west, nwest};
    static directions gon[] = {north, neast, nwest, east, west, seast, swest, south};
};

大家好,有人知道上面的代码出了什么问题吗?

我在VC++2008Ex中对第二行代码出现了两个错误:

error C2059: 语法错误 : '{'

error C2334: 在“{”之前有意外的标记;跳过表象函数体


1
这些代码本身没有问题。你可能在文件的其他地方有语法错误,导致编译器混淆了。或许你把变量定义在了类体内等无效区域。 - Oliver Charlesworth
发更多的代码,我这边可以编译。 - Drake
据我所知,这段代码没有问题;在g++ 4中,你的代码可以正常工作。 - Ernest Friedman-Hill
你确定吗?我只是为了完整性把它括起来放到了一个小类中。我没有真正改变任何其他东西来破坏它。我会把这些行删除然后再试一次。马上回来。 - John
非常奇怪。我刚刚将源代码复制粘贴到一个名为“c.cpp”的文件中,然后运行“g++ -c c.cpp”,结果出现了两个错误:a brace-enclosed initializer is not allowed here before ‘{’ tokeninvalid in-class initialization of static data member of non-integral type ‘ARouter::directions []’。这是使用g++ 4.5.2、4.1.2、4.2.1、3.0.4、2.8.1和其他一些版本时出现的情况(错误随着旧版本而变化)。Solaris的“CC”也会报错。你们其他人是如何编译而没有出现错误的?(不,原始问题并没有被编辑过。) - Keith Thompson
显示剩余2条评论
1个回答

5

你不能像那样在类内部定义一个变量。

应该这样写:

class ARouter {
    enum directions {north, neast, east, seast, south, swest, west, nwest};
    static directions gon[];
};

ARouter::directions ARouter::gon[] = {north, neast, nwest, east, west, seast, swest, south};

类的声明放在类体内,定义则放在外面。请注意,通常会将类体放在头文件中,将定义放在源文件中。


在这种情况下,"class variable" 这个别名误导了我。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接