Pergunta

Eu tenho o seguinte trecho de legado C ++ código que não compila:

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

extern ostream *debug;

GCC (g ++) reclama: "Espera initializer antes‘*’token"

Olhando em volta parece mais comum para declarar estes como referências externas, como esta:

extern ostream& debug;

Por que é um ponteiro não é válido, mas uma referência está nesta situação?

SOLUÇÃO:

O verdadeiro problema, como mencionado abaixo é que o especificador std :: namespace está faltando. Aparentemente, este era comum no código antigo C ++.

Foi útil?

Solução

Sim, você pode declarar um ponteiro usando extern. O seu erro é mais provável que você se esqueceu de se qualificar usando std:::

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

extern std::ostream *debug;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top