Можете ли вы объявить указатель как внешний в C++?
У меня есть следующий бит унаследованного кода C++, который не компилируется:
#include <stdio.h>
#include <iostream>
extern ostream *debug;
GCC (g ++) жалуется: "ожидаемый инициализатор перед токеном *"
Оглядываясь вокруг, кажется более распространенным объявлять их как внешние ссылки, например так:
extern ostream& debug;
Почему указатель недействителен, но в этой ситуации есть ссылка?
РЕШЕНИЕ:
Реальная проблема, как упомянуто ниже, состоит в том, что отсутствует спецификатор std:: namespace. По-видимому, это было распространено в старом коде C++.
1 ответ
Решение
Да, вы можете объявить указатель, используя extern. Ваша ошибка, скорее всего, вы забыли пройти квалификацию, используя std::
:
// note the header is cstdio in C++. stdio.h is deprecated
#include <cstdio>
#include <iostream>
extern std::ostream *debug;