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)
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 –
Es könnte ein Fehler sein. FWIW Wenn Sie C++ 11 verwenden, sollten Sie 'nullptr' verwenden. – NathanOliver
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