G ++ 4.4.1を使用していて、nullptr
を使用したいのですが、インクルードする必要があるヘッダーファイルを見つけることができません。キーワードとしても使用されていないように思われます。
error: 'nullptr' was not declared in this scope
GCC 4.4.1はnullptr
をサポートしていません。
nullptr
のサポートはGCC 4.6.0で追加されました: http://gcc.gnu.org/gcc-4.6/changes.html
今後のC++ 0x ISO C++標準の実験的サポートの改善、nullptrのサポートを含む(Magnus Fromreideのおかげ)、noexcept、無制限の共用体、範囲- forループ(Rodrigo Rivas Costaのおかげ)、暗黙的に削除された関数、暗黙的なmoveコンストラクターに基づいています。
GCCの以前のバージョンでは、nullptr
を試してみたい場合は、このSO質問で回避策を試すことができます。
危険なため、上記で定義したnullptr
を使用しないことをお勧めします。 nullptr
を使用する場合は、次のステートメントがtrueである必要があります。
_sizeof(nullptr) == sizeof(void*) == sizeof(any pointer)
_
ただし、sizeof(nullptr)
(上記で定義)はこのルールに準拠しません。実際にはsizeof(bad nullptr) = 1
と評価されます。
これは正しい実装です。
_#pragma once
namespace std
{
//based on SC22/WG21/N2431 = J16/07-0301
struct nullptr_t
{
template<typename any> operator any * () const
{
return 0;
}
template<class any, typename T> operator T any:: * () const
{
return 0;
}
#ifdef _MSC_VER
struct pad {};
pad __[sizeof(void*)/sizeof(pad)];
#else
char __[sizeof(void*)];
#endif
private:
// nullptr_t();// {}
// nullptr_t(const nullptr_t&);
// void operator = (const nullptr_t&);
void operator &() const;
template<typename any> void operator +(any) const
{
/*I Love MSVC 2005!*/
}
template<typename any> void operator -(any) const
{
/*I Love MSVC 2005!*/
}
};
static const nullptr_t __nullptr = {};
}
#ifndef nullptr
#define nullptr std::__nullptr
#endif
_
C++ 11をサポートする最新のgccがない場合は、nullptrの代わりにNULLを使用してみてください。
-std = c ++ 0xを使用して、gcc 4.6.3でnullptr機能を有効にします