2009-07-18 19 views
2

J'ai une classe de fichier C++ avec fonction de lecture, qui est censée lire tout le contenu d'un fichier (comme Python) dans un tampon. Cependant, quand j'ai essayé d'appeler la fonction de lecture unistd.h, je reçois:Lecture POSIX standard masquée par une méthode de lecture avec une signature différente

file.cpp:21: error: no matching function for call to ‘File::read(int&, char*&, int)’

file.cpp:17: note: candidates are: char* File::read()

Qu'est-ce que je fais mal? Ceux-ci ont des signatures complètement différentes, pourquoi je ne peux pas simplement l'appeler?

+0

Allez-vous nous montrer le code, ou laissez-nous deviner toute la journée? – rlbond

+0

Sans le code, vous pouvez seulement obtenir des estimations. –

+0

Vous avez vraiment inclus ? Essayez d'appeler :: read (.. whatever) au lieu de lire (.. quoi que ce soit) cependant. – nos

Répondre

4

Avez-vous essayé d'être explicite sur la portée;

char* File::read() 
{ 
    // Double-colon to get to global scope 
    ::read(...); 
    // .. 
} 

?

+1

Merci. C'était exactement ce dont j'avais besoin. Trop de Python, je dois retourner en C++ et récupérer tout ça :-) – gruszczy

2

La définition de la version standard posix de la méthode de lecture est définie comme extern "C". Ceci est nécessaire pour que le symbole de lecture ne soit pas altéré par le compilateur C++ et soit lié à la fonction appropriée dans la bibliothèque. Le mélange et la correspondance des symboles C et C++ auront des résultats imprévisibles. Si possible, renommez la fonction C++ pour ne pas entrer en conflit avec les symboles déclarés extern "C".