2009-07-18 7 views
2

Ich habe eine C++ Dateiklasse mit Lesefunktion, die ganze Inhalte einer Datei (genau wie Python) in einen Puffer lesen soll. Allerdings, wenn ich versuchte Lesefunktion von unistd.h zu nennen, die ich erhalten:Standard POSIX readed shadowed durch eine Lesemethode mit unterschiedlicher Signatur

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

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

Was mache ich falsch? Diese haben völlig unterschiedliche Signaturen, warum kann ich sie nicht einfach anrufen?

+0

Werden Sie uns Code zeigen, oder lassen Sie uns den ganzen Tag raten? – rlbond

+0

Ohne den Code können Sie nur Vermutungen bekommen. –

+0

Sie wirklich enthalten ? Versuchen Sie, :: lese (.. was auch immer) anstatt zu lesen (.. was auch immer). – nos

Antwort

4

Haben Sie versucht, über den Umfang explizit zu sein;

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

?

+1

Danke. Das war genau das, was ich brauchte. Zu viel Python, ich muss zurück nach C++ gehen und das alles wieder zurück bekommen :-) – gruszczy

2

Die Definition für die POSIX-Standardversion der Lesemethode ist definiert als extern "C". Dies ist notwendig, damit das Lesesymbol nicht vom C++ - Compiler gestört wird und mit der richtigen Funktion in der Bibliothek verknüpft wird. Das Mischen und Abgleichen von C- und C++ - Symbolen führt zu unvorhersehbaren Ergebnissen. Benennen Sie nach Möglichkeit die C++ - Funktion so um, dass keine Konflikte mit Symbolen auftreten, die als extern "C" deklariert sind.

Verwandte Themen