XCode + C ++でstd :: vectorをどのように使用しますか? [閉まっている]
質問
さまざまな理由で(そして、それらが有効であることを保証しますので、「Cocoaを使用してください」と話さないでください)、XCode、C ++、OpenGL、OpenCL(側面に小さなGLUTを使用)を使用していくつかを再構築する必要がありますMacでのグラフィックデモ(XP + Visual Studio 2005開発による)。プロジェクトは" c ++ stdc ++"を使用してコマンドラインツールとして構築されました。
My Program.hファイルは、シェーダーオブジェクトを接続、コンパイル、リンクし、OpenGLシェーダープログラムとして使用するために準備します。このファイルには、次の関連するコード行が含まれています。
#include <vector>
using std::vector;
およびクラスのprivateセクション内:
vector<int> 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 <list>
using std::list;
そして
list<int> shaderHandles;
そして
for (list<int>::iterator s = shaderHandles.begin(); s != shaderHandles.end(); s++)
{
glAttachShader(handle, *s);
}
プログラムは期待どおりに動作します。
しかし、次のプログラムが原因で、これをベクター実装に完全に責めることはできません。
#include <iostream>
#include <vector>
using std::vector;
int main (int argc, char * const argv[])
{
vector<int> test;
test.push_back(1);
test.push_back(2);
test.push_back(3);
test.clear();
return 0;
}
問題なく動作します。
必要に応じて詳細情報を提供させていただきます。
Cocoa / Objective-Cを使用すべきだと言わないでください。今のところ、実際にはオプションではありません。そして、はい、リストを使用してこの機能を実現できますが、デモの他の部分は簡単に修正できません。
解決
皆さんごめんなさい。これを投稿して数分後、私はこの問題を後のために保存して、できることを続けることにしました。 fstreamでも同様の問題が発生しました。この新しい情報が利用できるようになったため、Googleの検索でこのトピック、そして最終的には解決策が生まれました。 。
私は完全に無関係なベクトル数学ファイルで独自の最小および最大マクロを定義していました。解決策は、マクロを削除し、std ::をminおよびmax呼び出しの前に置くことでした。
他のヒント
Mac SDKのドキュメントを確認しましたか?ベクタークラスに対してどの関数を宣言していますか?たぶん、あなたはいくつかのコンパイラフラグを設定しましたか? また、イテレータを使用してベクターをスキャンし、リストに対して行ったのと同じことをベクターに対して行うことができます。