6
votes

'Ostream' in nomspace 'std' ne nomme pas de type

Comme le titre suggère, je rencontre un problème plutôt étrange. Lorsque j'essaie de compiler un code source d'échantillon (qui utilise libotb), je continue à obtenir des erreurs comme celle du titre. Ce qui est étrange est que #include est présent dans ladite source / en-tête où l'erreur est signalée.

D'autre part Si j'explète le code dudit fichier et créez une source distincte et compilez-la avec g ++ Ça fonctionne, mais si je compile avec g ++ -i Je reçois la même erreur, bien que le fichier source n'inclut rien dudit chemin.

Comme indiqué dans les commentaires ci-dessous, ce problème se produit avec simplement xxx


9 commentaires

Donc quelle est la question? Certains code que nous n'avons pas vus contiennent une erreur. Il n'y a pas grand chose que nous pouvons faire à ce sujet


Avez-vous utilisé à l'aide de nomspace std ou std :: préfixes?


@jalf: Le code a-t-il une pertinence?


@ARLGRAY: Je l'ai réduit à #include int Main () {std :: cerr << "test"; retour 0; }


Cette réponse pourrait être utile pour vérifier que vous avez réellement inclus les en-têtes prévus lors de la modification du chemin Inclure (G ++ -H) Stackoverflow.com/a / 6685693/104774


Regardez "" et voyez quels horizons sont là-là - je suis d'accord avec Stefaanv qui examinant ce que l'utilisation de l'actamly utilisée est votre meilleure voie à suivre ...


Peut-être que path_to_libotb_headers mène à un en-tête appelé iostream de sorte qu'on soit ramassé?


@Danielelfischer: Pour une certaine raison, il semble qu'il y ait effectivement un fichier appelé iostream, mais cela n'a pas traversé l'esprit et que le fait qu'il y avait presque 2 000 fichiers dans ce dossier, je ne l'ai pas repéré.


Ajouter -H aux arguments GCC ou G ++ pour imprimer des chemins vers tous les fichiers d'en-tête utilisés. Regardez à travers la liste pour repérer des problèmes évidents, comme iostream pas dans le chemin standard.


4 Réponses :


1
votes

Vérifiez que votre inclut toutes les espaces de noms fermés - votre include peut être déclarée accidentellement dans un espace de noms si une en-tête précédente n'a pas fermé ses espaces de noms.

Vous pouvez également tenter de localiser ce problème en déplaçant le STD inclus plus tôt dans la liste INCLUS.


0 commentaires

8
votes
#include <ostream>
should fix it. Under C++11, #include <iostream> is supposed to pull in all of <ostream>, but prior to C++11 you had to do the individual #includes.

0 commentaires

3
votes

Il devrait être:

int Principal ()

  • vous avez manqué le () :)

0 commentaires

0
votes

Si vous êtes un programmeur Arduino, n'oubliez pas que Arduino n'en a pas Construction normale «Ostream».
Mais il y a des bibliothèques offrant des fonctions similaires.

ps. Gardez à l'esprit qu'il ya de bonnes raisons que le type de streaming ne soit pas inclus.


0 commentaires