2012-03-31 6 views
0

sagen, dass ich eine Art Kante haben:ein Arrayliteral in C Casting ++ auf einen Typ (VC++)

struct edge 
{ 
    long long weight; 
    int dest; 
    inline bool operator<(const edge& other) const 
    { 
     return weight > other.weight; 
    } 
}; 

In G ++ 4.1.2 (CentOS) ich sicher tun können:

edge e = (edge){0, 1}; 

Aber der gleiche Code auf MSVC++ 2010 verursacht:

test.cpp(57) : error C2059: syntax error : '{' 
test.cpp(57) : error C2143: syntax error : missing ';' before '{' 
test.cpp(57) : error C2143: syntax error : missing ';' before '}' 

gibt es eine Möglichkeit, dies in MSVC++ Compiler zu tun?

+4

Ist das nicht die Besetzung überflüssig? – Marlon

+0

Oh ok, ich habe es gerade ausprobiert, und es funktioniert. Ich benutze G ++ die ganze Zeit und habe gesehen, wie andere es gewirkt haben, also dachte ich, das wäre die einzige Option. Vielen Dank! – uberness132

+1

Ja, die Besetzung sah auch komisch aus. Die Syntax (ohne die Besetzung) geht den ganzen Weg zurück zu K & R C. – DRVic

Antwort

0

Ich schlage vor, mit einem Konstruktor:

struct edge { 
    long long weight; 
    int dest; 
    edge(long long w, int d): weight(w), dest(d) {}; 
    inline bool operator<(const edge& other) const { 
    return weight > other.weight; 
    } 
}; 

dann verwenden

edge e (0,1);