2012-10-25 10 views
0

je suis en train de suivre l'application dans OOP C mais je reçois des erreurs dans mon dossier new.h.* inattendu, inattendu (

Je reçois un tas d'erreurs « inattendues ». À peu près tout après la premier 'vide' est exepected. des idées?

#ifndef NEW_H 
#define NEW_H 

#ifdef __cplusplus 
extern "C" { 
#endif 

void * new (const void * type); 
void delete (void * item); 


#ifdef __cplusplus 
} 
#endif 



#endif /* NEW_H */ 

enter image description here

+3

Êtes-vous sûr de compiler pour C? 'new' et' delete' sont des mots-clés en C++ et on dirait que c'est ce sur quoi il se fout. – Mysticial

+0

Essayez-vous d'implémenter les opérateurs 'new' et' delete'? Si c'est le cas, vous devez ajouter le mot clé 'operator'. –

+2

qu'est-ce que c'est exactement OOP C? C n'est pas orienté objet. – fayyazkl

Répondre

0

Si vous voulez simuler la fonctionnalité de new dans C comme dans C++ alors vous êtes réellement donné un mauvais argument de new. Il devrait être const unsigned int ou const size_t parce que de nouvelles est utilisé en C++ comme

int *p; 
p=new (sizeof(int)); 

Mais ici, il est incompatibilité de type ne peut pas convertir int à const void *

Pour delete il est bien parce que delete prend pointer comme argument

+0

Problème ici est la compilation avec un nouveau comme un nom de fonction en utilisant c code et gcc – fayyazkl

+1

En quelque sorte le compilateur sais sur le mot-clé nouveau alors seulement il donne une erreur.Etes-vous en utilisant IDE intégré ou compilateur et éditeur séparé – Omkant

+0

Parce que dans mon cas, il ne donne aucune erreur dans Linux gcc-4.5 – Omkant

1

Eh bien, vous compilez comme C, mais les opérateurs new et delete ne sont supportées que en C++.

En outre, la signature pour new et delete sont:

void* operator new(size_t n); 
void operator delete(void* p); 

Vous pouvez également surcharger ces opérateurs pour les classes spécifiques (en les déclarant dans une classe).

+0

Je pense que le contraire est vrai. – glglgl

+0

Dans cet exemple, new et delete sont définis en tant que nouvelles méthodes. –

+0

Il y a aussi le placement 'new', et le tableau' new', et ... un certain nombre d'autres variations sur 'new'. –

1

nouveau et supprimer sont des mots-clés en C++, pas des noms de fonctions juridiques.

Même si vous pensez compiler C, vérifiez si cela le corrige. Si ce n'est pas le cas, alors il peut s'agir de l'erreur mystérieuse C/C++ classique: problème dans le précédent inclure, il manque probablement un point-virgule ou quelque chose.

+0

Ceci est un programme c pas un programme C++ –

+0

Votre extension de fichier .c? Compilez-vous ceci avec un compilateur c ou un compilateur C++? – fayyazkl

+0

@fayyazkl oui c'est un fichier .c. J'utilise gcc pour essayer de le compiler. –

2

Cela semble être l'un des rares programmes C qui ne sont pas valides sous C++: les identifiants new et delete sont parfaitement valides sous C, mais sont réservés sous C++.