2010-02-01 3 views
13

는 모두직접 창에서 std :: vector를 인덱싱 할 수없는 이유는 무엇입니까?

lines[0] - error:overloaded operator not found 

그래서, 나는이 벡터를 입력 벡터를

std::vector<std::string> lines. 

있고, 직접 실행 창에, 그러나

std::string temp = lines[0]; 

처럼 액세스 할 수 있습니다

lines.at(0) - error:symbol is ambiguous 

이 전혀 작동하지 않습니다. C++에서 직접 실행 창을 사용하는 트릭이 있습니까? 나는 대부분 C# 배경에서 시작하는데, 모든 것이 잘 작동한다 (그리고 나는 직접 실행 창에서 인텔리 센스가있다). 나는 C++이 훌륭 할 것이라고 기대하지는 않았지만, int 외의 것들을 위해 작동 할 것이라고 생각했다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? 감사.

편집 : 나는 명확해야, 아무것도 정말 직접 실행 창에서 작동하지 않습니다, 이것은 단지 단순화 된 예입니다

편집 : 디버그 모드에서

답변

14

즉각적인있어 창문이 지원하지 않는 시계 과부하가 걸린 운영자. 표준 컨테이너를 전체적으로 합리적인 방식으로 인쇄 할 수있는 몇 가지 지원이 있습니다 (예 : http://www.virtualdub.org/blog/pivot/entry.php?id=120 참조). 그러나 여기에는 operator[]을 사용할 수있는 것으로까지 확장되지 않습니다.

디버거의 이후 개정에서 개선 될 것이지만 지금은 벡터의 i 번째 요소를 살펴 보려면 lines._Myfirst[i]을 시도해보십시오.

(_Myfirst, VC++와 함께 제공되는 표준 라이브러리에서 std::vector의 멤버 변수가 시퀀스의 첫 번째 요소를 가리킴).이 코드는 다른 개체 인 것처럼 벡터를 검사하는 것입니다. 이 작업을 수행하려면 머리글을 살펴 봐야했지만 ... 매우 편리하지는 않지만 잘하면이 방법이 도움이 될 것입니다. 다른 컨테이너와 비슷한 작업을 수행 할 수는 있지만 머리글을 살펴보고 해결해야합니다. 방법.)

(그런데, C#에서 작업 해왔다면 C++ 디버거는 일반적으로 조금 덜 매끈한 것처럼 보일 것입니다. 이것은 단지 그 하나의 예일뿐입니다. CLR쪽에 더 많은 작업이있었습니다.)

+0

그래, 덕분에 도움을 주셔서 감사합니다. – Steve

+0

시계의 멤버 함수와 즉각적인 창을 호출하는 것만으로는 작동하지 않습니다. (나는 슬릭의 부족을 언급하기 위해 나의 대답을 업데이트했다 - 이것은 두 번째 예이다!) 당신은 보통 프리 스탠딩 기능을 호출 할 수있다. 짜증나지만, 익숙해 질 수 있습니다. 물론 선택의 여지가 없습니다 :) (바라건대 나중의 수정은 네이티브 디버깅 측면을 향상시킬 것입니다. 이미 완벽하게 사용할 수 있지만 CLR 쪽에서 수행 할 수있는 부분이 없습니다.) –

+0

.at()가 같은 이유로 실패 할 수 있습니다. 오버로드되었습니다. – MSalters

-1

요즘의 Visual Studio 버전 (예 : 2013/2015) _Myfirst 멤버 변수는 std :: vector 변수에 대해 더 이상 존재하지 않습니다. 대신에 _C_begin을 사용하십시오. 라인 ._C_begin [i].

+1

답변을 정교하게 만들거나 예를 들어 더 자세히 설명해 주실 수 있습니까? 이것은 질문자가 당신이 의미하는 것을 더 명확하게 이해하는 데 도움이 될 수 있습니다. – itsols

관련 문제