2016-08-03 9 views
0

Mein Problem scheint etwas ähnlich Conversion from null-integer to pointer in comma listRückkehr NULL-Zeiger, ungültige Konvertierung von 'long int' auf 'Object *'

hier ein minimales Beispiel

ist
#include <utility> 

struct Object { 
    double foo; 
}; 

std::pair<Object*,int> test_function() { 
    typedef std::pair<Object*,int> pair_t; 
    return pair_t(NULL, 2); 
} 
// test.cc 

mit gcc 4.4.7, g++ -std=c++0x -c test.cc -o test.o schlägt fehl mit

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_pair.h:90: error: invalid conversion from \u2018long int\u2019 to \u2018Object*

Es ist zu kompilieren, wenn ich -std=c++0x weglassen. Auch wenn ich neuere Versionen von gcc verwende, ist die Kompilation in Ordnung. Ist etwas falsch mit dem Code? Sollte man solche Unterschiede in gcc-Versionen erwarten?

A später edit: Ich kann auch pair_t((Object*)NULL, 2)

+2

Haben Sie einen bestimmten Grund, 'NULL' anstelle von' nullptr' in Post-C++ 11-Code zu verwenden? Außerdem ist gcc 4.4.7 * extrem * alt, ich schlage vor, dass Sie Ihren Compiler aktualisieren, da dieser Code auf einem modernen Compiler einwandfrei funktioniert: http://coliru.stacked-crooked.com/a/a01d03ae16e6c3bf –

+0

Es könnte ein Fehler sein. FWIW Wenn Sie C++ 11 verwenden, sollten Sie 'nullptr' verwenden. – NathanOliver

+0

Ich gebe meine Unkenntnis von 'nullptr' zu. Der Code wurde ursprünglich nicht für C++ 11 geschrieben, aber ich habe einen anderen Teil davon geändert, um eine Bibliothek aufzunehmen, die C++ 11 benötigt. – bernie

Antwort

Verwandte Themen