您可以在 C++ 中将指针声明为 extern 吗?

Posted

技术标签:

【中文标题】您可以在 C++ 中将指针声明为 extern 吗?【英文标题】:Can you declare a pointer as extern in C++? 【发布时间】: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++ 代码”需要使用无法识别或不强制命名空间的编译器进行编译。 【参考方案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:: :)

以上是关于您可以在 C++ 中将指针声明为 extern 吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中将静态数组声明为指针

GNU链接器:如果头文件中的指针被声明为NULL和/或extern [重复]

我们如何在 C++ 中将二维数组/向量作为函数参数传递? [复制]

C++ this 指针始终为 const

C++变量类型

c++ 全局对象