Pregunta

Tengo el siguiente bit del legado C ++ código que no se compila:

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

extern ostream *debug;

GCC (g ++) se queja: "inicializador esperada antes de símbolo‘*’"

Mirando a su alrededor parece más común para declarar estos como referencias externas, como esto:

extern ostream& debug;

¿Por qué es un puntero no válido, pero es una referencia en esta situación?

SOLUCIÓN:

El problema real, como se menciona a continuación es que el especificador de espacio de nombres std :: falta. Al parecer, esto era común en los mayores de código C ++.

¿Fue útil?

Solución

Sí, se puede declarar un puntero usando extern. es más probable que se olvidó de calificar usando std:: su error:

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

extern std::ostream *debug;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top