Bonjour, j’ai un problème avec les namespace. L’initialisation se passe bien, mais lorsque je veux l’utiliser dans une classe, le namespace ne marche pas. (J’ai bien iBonjour, j’ai un problème avec les namespace. L’initialisation se passe bien, mais lorsque je veux l’utiliser dans une classe, le namespace ne marche pas. (J’ai bien inclus le fichier .h avec le namespace).
#include "Item.h"
namespace item
{
//Srtructure de dimmension
typedef struct DimensionVariable DimensionVariable;
struct DimensionVariable
{
int x;
int y;
};
//Item dimension
DimensionVariable Dimension(int x, int y)
{
DimensionVariable DimTMP;
DimTMP.x;
DimTMP.y;
return DimTMP;
}
}
et voici la classe (le .h)
class Item : public ConcreteObject
{
public:
//Builder
Item();
Item(int price, int damage);
~Item();
protected:
//main variable
int m_price;
int m_damage;
item::DimensionVariable m_dimension;
};
Juste : c'est la première fois que j'utilise des namespace donc je ne les maîtrise pas super bien.
"Ne marche pas" c'est pas vraiment un message d'erreur ni la description d'un problème. Surtout qu'un namespace, par défaut ça n'a pas de comportement, c'est juste du nommage.
inutile en C++, d'autant que "typedef old_type new_type" est déprécié au profit de "using new_type = old_type" qui est plus général,
pour initialiser des champs par un constructeur on utilise la liste d'initialisation en priorité,
ton header n'a pas besoin de <iostream>.
Pas faut d'avoir essayé de trouver ce qui peut foirer concernant ton problème, mais sans le code exact et le message d'erreur, impossible de répondre. Actuellement, il n'y a rien de surréaliste dans ton code. A part les typedefs inutiles et le fait que ta fonction ne fasse rien, j'ai copié collé bêtement le code comme pourrait le faire un compilo et ça compile OK.
#include "Item.h"
namespace item
{
//Srtructure de dimmension
using struct DimensionVariable = DimensionVariable;
struct DimensionVariable
{
int x;
int y;
};
//Item dimension
DimensionVariable Dimension(int x, int y)
{
DimensionVariable DimTMP;
DimTMP.x;
DimTMP.y;
return DimTMP;
}
}
Header de la classe :
#ifndef ITEM_H_INCLUDED
#define ITEM_H_INCLUDED
#include <iostream>
#include "G:\*****\Game\******\Alpha (0.0.0)\Technical Project\Alpha (0.0.0)\object\Real_Object\Concrete_Object.h"
#include "G:\*****\Game\******\Alpha (0.0.0)\Technical Project\Alpha (0.0.0)\Struct\Item.h"
class Item : public ConcreteObject
{
public:
//Builder
Item();
Item(int price, int damage);
~Item();
protected:
//main variable
int m_price;
int m_damage;
item::DimensionVariable m_dimension;
};
#endif // ITEM_H_INCLUDED
Et enfin voici le message d'erreur:
G:\****\Game\*****\Alpha (0.0.0)\Technical Project\Alpha (0.0.0)\object\Real_Object\Item\Item.h|21|error: 'item' does not name a type|
Et le reste (si jamais) :
||=== Build: Debug in Alpha (0.0.0) (compiler: Mingw-32w) ===|
G:\****\Game\*****\Alpha (0.0.0)\Technical Project\Alpha (0.0.0)\object\Real_Object\Item\Solids_Objects\Engineering\Take-off_Engine.h|1|warning: extra tokens at end of #ifndef directive [enabled by default]|
G:\****\Game\*****\Alpha (0.0.0)\Technical Project\Alpha (0.0.0)\object\Real_Object\Item\Solids_Objects\Engineering\Take-off_Engine.h|2|warning: missing whitespace after the macro name [enabled by default]|
G:\****\Game\*****\Alpha (0.0.0)\Technical Project\Alpha (0.0.0)\object\Real_Object\Item\Solids_Objects\Piloting\Take-Off_Seat.h|1|warning: extra tokens at end of #ifndef directive [enabled by default]|
G:\****\Game\*****\Alpha (0.0.0)\Technical Project\Alpha (0.0.0)\object\Real_Object\Item\Item.h|21|error: 'item' does not name a type|
||=== Build failed: 1 error(s), 3 warning(s) (0 minute(s), 1 second(s)) ===|
J'ai censuré 2 ou 3 chose par souci de confidentialité. (je travaille chez Ubisoft : d'où mon haut niveau )
Remarque : le namespace est bien initialisé car quand "it" par exemple, me propose de mettre {}item.
- Edité par CarlMckayre 20 janvier 2016 à 15:33:20
Oui mais les includes prenne pas comme dossier par défaut celui on se trouve le .exe mais celui où il se trouve et du coup comme ils sont dans deux dossier différent situé a la même hauteur, je n'ai pas trouver d'autre moyen que de passer par les chemins absolues.
- Edité par CarlMckayre 20 janvier 2016 à 15:43:59
>Oui mais les includes prenne pas comme dossier par défaut celui on se trouve le .exe
Encore heureux !!!
Le chemin de l'exe doit pouvoir changer sans que les sources n'aient à suivre le mouvement, et vice-versa.
Les chemins d'includes, c'est toujours relatifs, car on peut facilement contrôler ces chemins relatifs dans les options de compilation.
Réveillez-vous, avec un café, une baffe d'un collègue, etc... tant que vous n'êtes pas assez réveiller pour mettre un chemin relatif pour les includes.
Déjà, des warnings, vous comptez les corriger quand ?
Généralement, les warning indiquent des conneries qui expliquent les erreurs qui les suivent.
Le code de "Take-off_Engine.h", svp.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Pas con pour les include, j'avais pas pensé aux options de compilation par contre je ne comprend pas ceux que sont les warning (ce qui faut corriger)(même si je doute qu'il ait un lien avec mon erreur)
Pour les remplir je fais clique droit sur le projet > build option > Search directories > compiler.
Et j'ai mis le chemin absolut de mon .exe ainsi que le relatif de l'include que je mettre.
Et j'ai bien mis les <...> pour l'include c'est juste que en haut j'avais bien dis que par rapport au autres message je n'ai pas eu le temps de modifier les include (je connais la différence entre les <...> et les "...".)
- Edité par CarlMckayre 21 janvier 2016 à 12:43:53
>Pour les remplir je fais clique droit sur le projet > build option > Search directories > compiler.
Je ne connais pas votre IDE, mais il est très probable que cela rien à voir avec les includes.
RTFM !!!
>Et j'ai mis le chemin absolut de mon .exe
Mais on s'en cogne de l'exe, ce n'est qu'un sous-produit de la compilation, ça n'a rien à foutre dans les settings du projet autrement que comme cible de la compilation.
>Heu, un "-" dans un #ifndef, moi, je tenterais pas diable.
J'ai dis cela, ça peut passer pour une blague, mais non, VIREZ MOI CE "-", FISSA.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Ok, comme vous vous êtes pas rendu instantanément compte du bordel que peut générer les formules arithmétique dans des include-guard et que vous n'arrivez pas à utiliser des chemin d'include relative correctement, je suppute un putain de bordel dans votre arborescence et j'imagine le pire en sortie de pre-processing, même sans aucun warning.
Pour éviter des cauchemars, pouvez-vous vérifier le résultat de pré-processing d'un des fichiers cpp qui ne compile pas ?
Sous VS, c'est l'option de compilation "/P".
Pour GCC, je crois que c'est -E.
Avec cette sortie, vous pourrez vérifier que les include-guard, les constantes de compilation et les MACRO ne se marchent pas dessus.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Erreur classique que les options indiquées ci-avant permettent de facilement détecter.
Pour CB, bin c'est fonction du compilateur qui est configuré, => RTFM.
Normalement, c'est le genre d'erreur qui apparaît directement après la modification, donc facile à repérer s'il on s’astreint à toujours avoir quelque chose de compilable à chaque modification.
"#pragma once" n'est pas standard mais très largement répandu pour ne plus gérer ces include-guards du siècle dernier.
Maintenant, vous êtes prié de supprimer ces includes avec un chemin en dur de votre code, FISSA.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Je pense qu'il y à d'autres façon de s'adresser au personne à qui on répond, peu importe leur erreurs ou problème de compréhension.
L'auteur est clairement débutant, ce n'est pas en le cassant à répétition que ça va le faire avancer. J'ai honnêtement étais choqué de la façons dont les gens s'exprime sur ce post, c'est très agressif. Si quelqu'un me parle comme ça au travail ou dans ma vie de tout les jours je ne reviendrais jamais voir cette personne pour de l'aide.
Le but de ce message: S'il vous plait respectez vous les un les autre bordel!
[PELLE][inventaire]
Bug namespace : 'namespace' does not name a type
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Si vous ne trouvez plus rien, cherchez autre chose.
Si vous ne trouvez plus rien, cherchez autre chose.
Si vous ne trouvez plus rien, cherchez autre chose.