4


0

XCode Cでstd :: vectorとはどうですか?

さまざまな理由で(そしてそれらが有効であることを保証するので、「use Cocoa」の話はしないでください)、私はXCode、C、OpenGL、OpenCL(少し横にGLUTを付けて)で作業しなければなりません(XP Visual Studio 2005の開発から来る)。 プロジェクトは、 "c stdc"を使用してコマンドラインツールとして構築されました。

私のProgram.hファイルは私のシェーダオブジェクトを一緒に接続し、コンパイルし、リンクし、そしてそうでなければOpenGLシェーダプログラムとして使用するためにそれらを準備します。 このファイルに含まれているのは、次の関連コード行です。

#include
using std::vector;

そしてクラスのプライベートセクション内で:

vector shaderHandles;

そしてシェーダーハンドルを追加するとき:

shaderHandles.push_back(shaderHandle);

そして最後に、プッシュされたシェーダハンドルを使うとき:

for (int s = 0; s < (int) shaderHandles.size(); s++)
{
    glAttachShader(handle, shaderHandles[s]);
}

私のすべての経験と研究において、Cのこれらの行には何の問題もありません。 ただし、コンパイル時に(デバッグまたはリリースであるため、 `+ _GLIBCXX_DEBUG +`問題とは関係ありません)、次の4つのエラーが生成されます。

/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/stl_bvector.h:916: error: 'size' is not a member of 'std'
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/stl_bvector.h:961: error: 'size' is not a member of 'std'
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/vector.tcc:350: error: '__old_size' is not a member of 'std'
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/vector.tcc:453: error: '__old_size' is not a member of 'std'

また、stl_bvector.hとvector.tccにリンクを張っているファイルは、

/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/vector

これまでのところ、多数のGoogle検索で何も起こらなかった。 このコードはすべてWindows上で完璧に動作します。 さらに悪いことに、上記のコードを同等のリストに置き換えた場合、次のようになります。

#include
using std::list;

and,

list shaderHandles;

and,

for (list::iterator s = shaderHandles.begin(); s != shaderHandles.end(); s++)
{
    glAttachShader(handle, *s);
}

プログラムは期待どおりに動作します。

しかし、次のようなプログラムがあるので、ベクトル実装に関してこれを完全に非難することはできない

#include
#include
using std::vector;

int main (int argc, char * const argv[])
{
    vector test;

    test.push_back(1);
    test.push_back(2);
    test.push_back(3);

    test.clear();
    return 0;
}

問題なく動作します。

必要に応じてより多くの情報を提供させていただきます。

私はCocoa / Objective-Cを使うべきだと言わないでください。今は本当に選択肢ではありません。 そしてはい、リストを使ってこの機能を実行することができますが、私のデモの他の部分はそれほど簡単に作り直すことはできません。

2 Answer


3


ごめんなさい。 これを投稿してから数分後に、私はできる限りのことを続けることにしました。 fstreamでも同様の問題が発生しています。 この新しい情報が利用可能になると、Googleの検索で このトピックが表示され、最終的には解決策となりました。

私は完全に無関係のベクトル数学ファイルで私自身の最小および最大マクロを定義しました。 解決策は、私のマクロを削除し、std ::をminとmaxの呼び出しの前に置くことでした。


0


Mac SDKのドキュメントをチェックしましたか?ベクトルクラスに対してどのような関数が宣言されていますか? 多分あなたはいくつかのコンパイラフラグを設定しましたか? ベクトルに対しても、リストに対して行ったのと同じことを実行できます。反復子を使用してベクトルをスキャンすることもできます。