2008-12-14 8 views
1

J'ai le bit de l'héritage du code C++ suivant ne compile pas:Pouvez-vous déclarer un pointeur comme extern en C++?

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

extern ostream *debug; 

GCC (g ++) se plaint: "initialiseur attendue avant '*' jeton"

En regardant autour, il semble plus fréquent de déclarer ces comme références externes, comme ceci:

extern ostream& debug; 

Pourquoi un pointeur n'est pas valide, mais une référence est dans cette situation?

SOLUTION:

Le vrai problème, comme mentionné ci-dessous est que le std :: spécificateur d'espace de noms est manquant. Apparemment, c'était courant dans les anciens codes C++.

+0

ne sais pas si ce serait une bonne réponse, mais je pense que le studio visuel est très bien avec ce genre de chose. – DShook

+1

Vous constaterez probablement que le « code C++ ancien » devrait être compilé avec un compilateur qui soit n'a pas reconnu ou n'a pas appliqué namespaces. –

Répondre

7

Oui, vous pouvez déclarer un pointeur à l'aide extern. Votre erreur est plus probable que vous avez oublié de se qualifier en utilisant std:::

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

extern std::ostream *debug; 
+0

Ah oui, les espaces de noms ne sont pas toujours nécessaires pour les bibliothèques C++ standard. – postfuturist

+0

oui. c'était le temps avant que C++ devienne un standard. vous avez utilisé pour iostream.h inclure et utiliser ostream sans le qualifier. mais de nos jours, C++ est une norme, et il vous oblige à utiliser std :: :) –

Questions connexes