2016-06-06 4 views
-1

Ich bevorzuge die Verwendung von typedef bevorzuge stattdessen using, aber ich bin über die Situation gestolpert, wo ich es seit dem Code thrift (Version 0.9. 3) verwendet eine typedef. Die kleinste Instanz des Fehlers in dem folgenden CodeC++ - Code kann nicht mit Fehler kompiliert werden 'Langer Typname' ist ungültig

#include <iostream> 
using namespace std; 

typedef int64_t long; 
typedef int32_t int; 

int main() { 

    cout << "Hello world " << endl; 
    return 0; 
} 

Der Fehler, den ich bekommen ist

test.cpp:4:17: error: 'long type-name' is invalid 
typedef int64_t long; 
       ^
test.cpp:4:1: error: typedef requires a name [-Werror,-Wmissing-declarations] 
typedef int64_t long; 
^~~~~~~~~~~~~~~~~~~~ 
test.cpp:5:17: error: cannot combine with previous 'type-name' declaration specifier 
typedef int32_t int; 
       ^
test.cpp:5:1: error: typedef requires a name [-Werror,-Wmissing-declarations] 
typedef int32_t int; 
^~~~~~~~~~~~~~~~~~~ 
4 errors generated. 

Der Ausgang I von g++ --version erhalten ist

Apple LLVM version 7.3.0 (clang-703.0.31) 
Target: x86_64-apple-darwin15.4.0 
Thread model: posix 

Könnte jemand helfen mit diesem Fehler kommt ?

+1

Können Sie Ihre Sparfündsdatei auch posten? –

+0

Sparsamkeit kommt nicht von alleine, Sie müssen etwas füttern. –

Antwort

0

Es sollte

typedef long int64_t; 
typedef int int32_t; 

Typedefs wie Variablendeklarationen arbeiten sein, nur mit typedef vor.

+0

Warum denken Sie, dass der Sparsamkeitscode diesen Fehler macht? – Curious

+1

@Curious Wie nennt man Sparsamkeit? – melpomene

+0

'Sparsamkeit --gen cpp test.thrift' – Curious

2

long ist ein Schlüsselwort in C++, daher können Sie keinen Typ mit dem Namen long erstellen. Siehe list.

Aber die Frage ist mit Thrift generierten Code. Ich habe einige Experimente mit Thrift, und ich kann durch das Hinzufügen dieser Zeile der offiziellen tutorial.thrift Datei, um das Problem zu reproduzieren:

typedef i64 long 

Anscheinend Thrift nicht prüfen, ob dies zu kompilieren oder nicht geht. Sie müssen also sicherstellen, dass Ihr typedef mit allen möglichen Sprachen in Ordnung ist.

+0

Ich glaube nicht, es ist ein Problem mit mir zu verstehen, warum der Fehler da ist. Sorry, wenn ich das falsch formuliert habe, habe ich versucht zu verstehen, warum Sparsamkeit diesen Fehler im C++ - Code erstellt .. – Curious

+0

Ich sehe. Allerdings, IMHO, ist es wahrscheinlich kein Problem mit Thrift. Deshalb frage ich nach deiner Sparsamkeitsakte. –