【问题标题】:Expected constructor, destructor, or type conversion before '=' token'=' 标记之前的预期构造函数、析构函数或类型转换
【发布时间】:2009-11-06 09:34:23
【问题描述】:

我在头文件的命名空间中有一些extern'd 变量,我正在尝试在其相应的 cpp 文件中初始化它们。但是,我不断收到主题标题中给出的错误。我不确定是什么问题。

前:

// Some header
namespace foo
{
    extern SDL_Surface* bar;
}

// In the impl file
#include "someheader.h"
foo::bar = 0;
.....

感谢您提供任何帮助。谢谢。

【问题讨论】:

  • 那么,你想初始化一个指向无效指针表示(NULL)的指针吗?为什么?
  • 如果你把它放在命名空间之外,它可以工作吗?
  • @Ed 这只是为了检查事情是否已初始化没问题,它需要一个演员顺便说一句
  • @Ed 因为让它未初始化是滑坡到未定义行为的一步。 IE。如果有人尝试使用它并且它没有被初始化,那么可能会发生非常糟糕的事情。
  • @RageZ 我过去在没有命名空间的情况下做过类似的事情,它已经奏效了。

标签: c++


【解决方案1】:

在文件级别,您只能定义类型(您只编写了一个赋值表达式)。因此,您需要将其更改为:

SDL_Surface* foo::bar = 0;

【讨论】:

  • 否则他必须在任何函数中移动该语句。
  • @Technowise - 问题是他将缺少变量的定义,链接器将因缺少符号而失败。
【解决方案2】:

它不知道 SDL_Surface 是什么类型。您需要定义它或至少前向声明它。

【讨论】:

  • 这个例子只是一个例子,不是实际的代码。我可以向你保证,它知道 SDL_Surface 是什么。我将编辑示例以使其更清晰。
猜你喜欢
  • 2011-12-04
  • 2010-12-12
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多