Можете ли вы объявить указатель как внешний в C ++?

У меня есть следующий бит унаследованного кода C ++, который не компилируется:

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

extern ostream *debug;

GCC (g ++) жалуется: «ожидаемый инициализатор перед токеном *»

Оглядываясь вокруг, кажется более распространенным объявлять их как внешние ссылки, например так:

extern ostream& debug;

Почему указатель недействителен, но в этой ситуации есть ссылка?

РЕШЕНИЕ:

Реальная проблема, как упоминалось ниже, заключается в том, что отсутствует спецификатор std :: namespace. По-видимому, это было распространено в старом коде C ++.

14.12.2008 03:34:15
Не уверен, что это будет правильным ответом, но я думаю, что визуальная студия хороша для такого рода вещей.
DShook 14.12.2008 03:35:49
Вы, вероятно, обнаружите, что «старый код C ++» должен быть скомпилирован с помощью компилятора, который либо не распознает, либо не применяет пространства имен.
Rob Kennedy 14.12.2008 04:22:52
1 ОТВЕТ
РЕШЕНИЕ

Да, вы можете объявить указатель, используя extern. Ваша ошибка, скорее всего, вы забыли квалифицировать, используя std:::

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

extern std::ostream *debug;
7
14.12.2008 03:35:42
Ах да, пространства имен не всегда были необходимы для стандартных библиотек C ++.
postfuturist 14.12.2008 03:37:14
да. это было время, прежде чем C ++ стал стандартом. Вы использовали iostream.h и использовали ostream, не уточняя его. но в настоящее время c ++ - это стандарт, и он требует от вас использования std :: :)
Johannes Schaub - litb 14.12.2008 03:39:33