【问题标题】:C++ Initializing static const structure variableC++初始化静态常量结构变量
【发布时间】:2012-08-18 06:07:27
【问题描述】:

我正在尝试向我的类添加一个静态常量变量,它是一个结构的实例。由于它是静态的,我必须在类声明中对其进行初始化。试试这段代码

class Game {
    public:
        static const struct timespec UPDATE_TIMEOUT = { 10 , 10 };

    ...
};

收到此错误:

错误:在“{”之前不允许使用大括号括起来的初始化程序 令牌

错误:非整数类型“const timespec”的静态数据成员的类内初始化无效

如何初始化它?谢谢!

【问题讨论】:

  • 请注意,C++ 中几乎不需要详细的类型说明符 (struct timespec)。只需写timespec

标签: c++ static struct initialization constants


【解决方案1】:

在源文件内的类外部的单独定义中对其进行初始化:

// Header file
class Game {
    public:
        // Declaration:
        static const struct timespec UPDATE_TIMEOUT;
    ...
};

// Source file
const struct timespec Game::UPDATE_TIMEOUT = { 10 , 10 };  // Definition

如果您将定义包含在头文件中,如果该头文件包含在多个源文件中,您可能会收到有关多重定义符号的链接器错误。

【讨论】:

  • 我是 C++ 的菜鸟,我听说了,我应该在 classname.h 文件中声明类并在 @987654324 中定义它们@ 文件。因此,我可以根据需要多次将.h 文件包含到我的程序中,但是何时以及如何使用.c 文件呢?我正在使用 g++ 编译器...
  • .c 用于 C 源文件,不要用于 C++。对 C++ 源文件使用 .cc.cpp.cc 在 Linux 上通常是首选,.cpp 在 Windows 上通常是首选,但两者都可以)。一般来说,声明表示“这是某事物的名称,但我所知道的仅此而已”(例如,类或函数的名称)。 定义 表示“这是某物的名称和它是什么”,例如类成员、函数体、变量值等
  • 是的,我明白了,谢谢!我在.h 文件中声明我的类,然后在.cpp 文件中定义它。然后我将.h 包含到我的程序中。现在的问题是:我应该如何处理我的.cpp 文件?我该如何使用它?我应该把它写在这里g++ main.cpp -o main吗?我在 Linux 上使用 g++。
  • 编译时将所有 .cpp 文件放入列表中。不要放标题。前任。 g++ main.cpp myclass.cpp -o main
  • @Kolyunya 如果你想让扩展保持简短,你可以使用 UPPER-case .C 扩展...更多关于扩展这个答案:stackoverflow.com/a/3223792 和该页面上的其他答案,或者只是谷歌“c++ source extensions
【解决方案2】:

将变量声明为函数内的静态变量,并使该函数返回对变量的引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多