2009-10-23 2 views
3

다양한 이유로 (그리고 나는 그들이 "코코아를 사용하십시오"라고 말하지 않기 때문에) 유효합니다. Xcode, C++, OpenGL, OpenCL, 약간의 그래픽 데모를 재구성하기위한 OpenCL, Mac (XP + Visual Studio 2005 개발에서 제공). 프로젝트는 "C++ stdC++"를 사용하여 명령 행 도구로 빌드되었습니다.XCode + C++에서 std :: vector를 어떻게 사용합니까?

내 Program.h 파일은 내 쉐이더 객체를 연결하고, 컴파일하고, 링크하고, OpenGL 쉐이더 프로그램으로 사용할 수 있도록 준비합니다.

#include <vector> 
using std::vector; 

및 클래스의 개인 섹션 내 : 코드의 관련 라인을 따르고 있습니다이 파일에 포함 된

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; 
} 

작품 :

그러나 사람은 다음 이유로 인해 프로그램, 벡터 구현에 전적을 비난 할 수 없다.

필요에 따라 더 자세한 정보를 제공해 드리겠습니다.

제발 코코아/Objective-C를 사용해야한다고 말하지 마십시오. 지금은 실제로 옵션이 아닙니다. 그리고 예, 목록을 사용하여이 기능을 수행 할 수는 있지만 데모의 다른 부분은 재 작업하기가 쉽지 않습니다.

답변

3

죄송합니다. 이것을 게시 한 후 몇 분 후에, 나는이 문제를 나중에 저장하여 내가 할 수있는 일을 계속하기로 결정했다. fstream에서 비슷한 문제가 발생했다.이 새로운 정보가 있으면 Google 검색에서 this topic을 가져 와서 궁극적으로 해결책을 찾게됩니다.

완전히 관련없는 벡터 수학 파일에 내 자신의 최대 및 최대 매크로를 정의했습니다. 해결 방법은 내 매크로를 제거하고 min 및 max 호출 앞에 std ::를 넣는 것입니다.

0

Mac SDK 문서를 확인했는데 벡터 클래스에 대해 어떤 기능을 선언 했습니까? 어쩌면 당신은 몇 가지 컴파일러 플래그를 설정 했습니까? 또한 반복자를 사용하여 벡터를 스캔하여 목록에서 사용한 것과 같은 방법으로 벡터에 대해 동일한 작업을 수행 할 수 있습니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 아니요, Mac SDK 설명서를 확인하지 않았습니다. 나는이 코드를 조금 읽었고 평범한 것을 발견하지 못했다. 컴파일러 플래그가 없습니다. 예, 할 수는 있지만 C는 제 첫 번째 언어이므로 구문을 배열하는 데 더 익숙합니다. 솔직히 말해서 반복기 항목은 모두 입력하기가 너무 어렵습니다. 감사 합니다만, 나는 그 전에 시간을 보냈음에도 불구하고 질문을 한 후 몇 분 후에 그것을 생각했습니다. – Dwight

관련 문제