2013-05-15 6 views
-1

J'ai un projet, dans lequel je dois obtenir la valeur de l'adresse avec gettip (code ASCII pour 177) mais j'ai toujours la même erreur: 'void *' n'est pas un pointeur- type de l'objetStatic const char adresse retour

Je peux modifier seulement le principal, la classe a été donnée comme ça.

#include <iostream> 
using namespace std; 

class A{ 

static unsigned char name; 

public: 
void* gettip(); 
}; 

unsigned char A::name=(char)177; //Ascii conversion of 177 

void* A::gettip() {return &name;}; 

int main() 
{ 
    A b; 
    cout<<*b.gettip(); //here is the error 
    return 0; 
} 

Merci!

+3

il semble que vous essayez d'utiliser la valeur de retour d'une méthode void –

+0

Cout << ((char *) b.gettip()); mais char * est une chaîne, donc il va toujours planter, cout << (char) * ((char *) b.gettip()); – Exceptyon

+0

@ 0A0D Ne sera pas, car il est privé. –

Répondre

4

cout<<*b.gettip(); demande au compilateur d'acquérir le résultat b.gettip(), qui est un void*. L'étoile en face de lui demande ensuite de déréférencer ledit pointeur - la réponse devrait être de type void, ce qui est tout à fait impossible.

Si vous souhaitez imprimer uniquement la valeur de le pointeur, pas ce qu'il fait, vous pouvez facilement le faire: cout << b.gettip();

Si au contraire vous souhaitez imprimer la valeur à le pointeur, vous d'abord besoin de le lancer à un pointeur d'un type que vous pouvez avoir des objets, comme unsigned char. Ceci serait accompli en effectuant static_cast<unsigned char*>(b.gettip()). L'impression de votre résultat serait alors simple: cout << *static_cast<unsigned char*>(b.gettip()).

Notez que vous ne pouvez pas imprimer la valeur du unsigned char* converti en le passant à cout, car il sera interprété comme le début d'une chaîne de style c.

+0

Pas 'char *' .... –

+0

@ 0A0D Il n'y a pas de caractère dans le code original, ni dans ma réponse. S'il vous plaît élaborer. –

+0

Il s'adapte parfaitement! Je vous remercie! Ceci est juste une partie de mon projet alors ... désolé pour la simple "complexité", a essayé de me résoudre comme tous les autres problèmes. – Alex

1

Votre appel à gettip() renvoie un pointeur vide. Vous ne pouvez pas le faire sans un cast. Mais je ne pense pas que ce soit la bonne solution. Vous devez modifier gettip() afin qu'il renvoie unsigned char.

unsigned char A::gettip() 
{ 
    return name; 
}; 
+0

Tout en fournissant une fonction appropriée pour accéder au nom est définitivement préférable, l'OP a déclaré que la classe n'était pas modifiable. –

+0

Je ne peux pas changer le type de gettip(), il est écrit là et je dois suivre cette règle, en utilisant cette distribution. Merci! – Alex

+0

Si vous devez utiliser un transtypage, utilisez un cast C++ –

0
cout<<*((unsigned char*)(b.gettip())); 

Ou le diviser pour le rendre plus lisible

void * v = b.gettip(); 
unsigned char * p = (unsigned char*)v; 
cout<<*p; 
+0

Pourquoi le downvote? – user93353

+0

Ce n'est pas un 'char non signé '. –

+0

@ 0A0D - 'nom char non signé statique;' – user93353