템플릿을 사용하여 다양한 프로파일 클래스를 작성 중이며 구조체 tm으로 표시되는 숫자 인덱스 또는 날짜와 시간으로 프로필을 인덱싱하려고합니다. 숫자 인덱스에 의한 인덱싱은 정상적으로 작동하지만 날짜에 의한 인덱싱은 개체에 대한 포인터와 함께 작동하지 않습니다. 다음은 작동하는 접근법과 작동하지 않는 접근법을 포함하는 샘플 코드입니다.C++ 객체에 대한 포인터가 주어지면 operator [] 함수를 호출하는 올바른 방법은 무엇입니까?
#include "profile.h" // Class Profile<T> is declared and defined here.
float f;
int i;
struct tm d;
Profile<float> p;
Profile<float> *pPtr;
// Non-pointer syntax
f = p[i]; // this works.
f = p.operator[](i); // this works, but its ugly.
f = p[d]; // this works.
f = p.operator[](d); // this works, but its ugly.
// Pointer syntax
f = (*pPtr)[i]; // this works.
f = pPtr->operator[](i); // this works, but its ugly.
f = (*pPtr)[d]; // this isn't what I typed. I did f = *(pPtr)[d];
f = pPtr->operator[](d); // this works, but its ugly.
이 C++ 코드는 컴파일러 에러 메시지가 오류 C2677이고 비주얼 스튜디오 2008에 기록되는 이진 '['전역 연산자 (또는 허용 가능한 전환 없음) 'TM'를 입력 취하는 발견.
C++ 객체에 대한 포인터가 주어지면 operator [] 함수를 호출하는 올바른 방법은 무엇입니까?
'f = (* pPtr) [d]; // 이것은 효과가 없다.'나는 그것이 작동한다는 것을 보증 할 것이다; 어떤 오류가 보이십니까? – ildjarn
'(* pPtr) [d]'가 작동하지 않는다는 것은 무엇을 의미합니까? '* pPtr'가'Profile &'을 낳기 때문에'p [d]'에 받아 들여지는 구독 연산자를 받아 들여야합니다. –
정말 이상합니다! 4 시간 동안 고생하고 일관된 컴파일러 오류가 발생하면 이제 작업이 시작됩니다. @^P –