3

Linux Mint を実行しています。バージョン情報は次のとおりです。

$ cat /etc/*-release
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=12
DISTRIB_CODENAME=lisa
DISTRIB_DESCRIPTION="Linux Mint 12 Lisa"

sfml を使用する C++ プログラムのファイルをコンパイルおよびリンクしようとしています。ファイルをコンパイルしようとすると、次のエラーが発生します。

$g++ -c lineTest.cpp Rasterizer.cpp simpleCanvas.cpp
In file included from /usr/local/include/SFML/System/Resource.hpp:211:0,
             from /usr/local/include/SFML/Graphics/Image.hpp:31,
             from simpleCanvas.h:13,
             from simpleCanvas.cpp:9:
/usr/local/include/SFML/System/ResourcePtr.inl: 
In constructor ‘sf::ResourcePtr< <template-parameter-1-1> >::ResourcePtr()’:
/usr/local/include/SFML/System/ResourcePtr.inl:31:12: 
error: ‘NULL’ was not declared in this scope
/usr/local/include/SFML/System/ResourcePtr.inl: In member function ‘void sf::ResourcePtr< <template-parameter-1-1> >::OnResourceDestroyed()’:
/usr/local/include/SFML/System/ResourcePtr.inl:148:18: error: ‘NULL’ was not declared in this scope

ResourcePtr.inl ファイルでの「NULL」の使用に問題があるようです。個人的には、このキーワードの使用を控えて 0 を使用するのが一般的ですが、自分が書いたわけでもないパッケージ ファイルで使用されている場合はどうすればよいでしょうか。さらに、管理者権限がないとファイルを編集して修正することはできませんが、sudo を使用して編集し、#include <cstddef>. これにより、何かが「定義されていない」か、キーワードまたはタイプが認識されないという、同様の問題の群れへの水門が開かれました (リストが長すぎて、ここに投稿できません)。これは、ライブラリに何かが欠けていることを示しているようです。最初にライブラリをセットアップするのにかなり苦労したので、正しくセットアップできなかった可能性があることに気付きました。ここのこの質問でそれを見ることができます. 私が間違っていることや、この問題を解決するために何ができるかを誰かが知っていますか?

4

1 に答える 1

2

このコードはコンパイルされず、説明したエラーが表示されます。

#include <SFML/Graphics/Image.hpp>
int main()
{
    return 0;
}

出力は次のとおりです。

In file included from ./include/SFML/System/Resource.hpp:211:0,
                 from ./include/SFML/Graphics/Image.hpp:31,
                 from test.cpp:1:
./include/SFML/System/ResourcePtr.inl: In constructor ‘sf::ResourcePtr< <template-parameter-1-1> >::ResourcePtr()’:
./include/SFML/System/ResourcePtr.inl:31:12: error: ‘NULL’ was not declared in this scope
./include/SFML/System/ResourcePtr.inl: In member function ‘void sf::ResourcePtr< <template-parameter-1-1> >::OnResourceDestroyed()’:
./include/SFML/System/ResourcePtr.inl:148:18: error: ‘NULL’ was not declared in this scope

幸いなことに、修正は簡単です。これは機能します。

#include <SFML/System.hpp>
#include <SFML/Graphics/Image.hpp>
int main()
{
    return 0;
}

これも機能するようです。

#include <cstddef>
#include <SFML/Graphics/Image.hpp>
int main()
{
    return 0;
}

を使用する前に、コードのどこかにこのヘッダーを含めるのを忘れていましたNULL。ヘッダーの前に含める限り、機能するはずです。

あなた自身が言ったように、それ自体がまたはNULLに展開するマクロであるため、の使用は少し混乱する可能性があります。新しい標準は、強く型付けされたを導入することによってそれを処理します。ResourcePtr.inlの31行目と148行目で変更するのが、おそらく問題を解決するための最良の方法です。0(void*)0nullptrNULLnullptr

于 2013-03-19T23:28:21.933 に答える