2012-03-24 14 views
0

Ich bin ein C-Programm zu schreiben und weil es keine Zeichenfolge in C ist, schrieb ich den folgenden Code um zu arbeiten:Array von typedef'd Saiten?

typedef char * string 

jetzt brauche ich eine Reihe von Strings und die folgende Anweisung gibt mir eine Fehlermeldung:

string * file1 

die Fehlermeldung sagt:

Error 1 error C2275: 'string' : illegal use of this type as an expression \\vmware-host\shared folders\school\misc\johncpp\porj\similarity.c 79 

im auf MSVC Compiler kann ich nicht ein Array von Strings whi erstellen ch ist im Wesentlichen char **?

dank

+13

Dies ist keine Problemumgehung, es ist nur eine Quelle der Verwirrung. –

+2

Ich wünschte, ich könnte +1 mehr, @Oli Charlesworth. –

+0

Haben Sie versucht, es in etwas anderes umzubenennen? (Ich stimme zu, dass es für andere verwirrend sein kann, wenn Sie sich auf ein char * als String beziehen, aber seien wir ehrlich, alle Microsoft APIs machen dasselbe.) – ShiggityShiggityShwa

Antwort

1

Wie @Oli in seinem Kommentar schon sagt, wollen Sie wahrscheinlich nicht wirklich es überhaupt zu tun. Vorausgesetzt, Sie haben einige Semikola an den richtigen Stellen, ist Ihr Code jedoch legal C. Es muss etwas Besonderes an MSVC sein, das Ihnen einen Fehler gibt. Sind Sie sicher, dass nichts anderes in Ihrer Kompilierungseinheit string heißt?

Edit: Eine schnelle Überprüfung bei this link zeigt an, dass Sie die Variable nur an einer Stelle deklarieren, die Sie nicht dürfen - sie muss sich an der Spitze eines Blocks oder außerhalb aller Blöcke befinden (d. H. Eine globale Variable).

0

Haben Sie am Anfang der Funktion file1 deklariert? MSVC implementiert C99 nicht, daher müssen Sie jede Variable an den Anfang deklarieren. Siehe Kommentare here:

The C compiler also generates this error if you attempt to define a variable below the start of a function (legal in C99 but not earlier) if that variable declaration used a typedef

0

Sind diejenigen, genau der Code in den Dateien?

typedef char * string 

würde

typedef char * string; 

Und

string * file1 

sein müsste

string * file1; 

Dies wird die Fehlermeldungen gehen weg, aber sein müssen ... Es ist immer noch eine bad Idee, weil kein Platz für eine Zeichenfolge reserviert ist.