【问题标题】:Can you declare a pointer as extern in C++?您可以在 C++ 中将指针声明为 extern 吗?
【发布时间】:2008-12-14 03:34:15
【问题描述】:

我有以下无法编译的遗留 C++ 代码:

#include <stdio.h>
#include <iostream>

extern ostream *debug;

GCC (g++) 抱怨:“'*' 标记之前的预期初始化程序”

环顾四周,将这些声明为外部引用似乎更常见,如下所示:

extern ostream& debug;

为什么指针无效,但引用在这种情况下?

解决方案:

如下所述,真正的问题是缺少 std:: 命名空间说明符。显然,这在较旧的 C++ 代码中很常见。

【问题讨论】:

  • 不确定这是否是一个正确的回应,但我认为 Visual Studio 可以处理这种事情。
  • 您可能会发现“旧 C++ 代码”需要使用无法识别或不强制命名空间的编译器进行编译。

标签: c++ pointers legacy


【解决方案1】:

是的,您可以使用 extern 声明一个指针。您的错误很可能是您忘记使用std:: 进行限定:

// note the header is cstdio in C++. stdio.h is deprecated
#include <cstdio>
#include <iostream>

extern std::ostream *debug;

【讨论】:

  • 啊,是的,标准 C++ 库并不总是需要命名空间。
  • 是的。那是 C++ 成为标准之前的时间。您曾经包含 iostream.h ,并使用 ostream 而不对其进行限定。但是现在,c++ 是一个标准,它要求你使用 std:: :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 2013-11-22
相关资源
最近更新 更多