다음을 통해 공유


컴파일러 오류 C2276

'operator': 바인딩된 멤버 함수 식에 대한 잘못된 작업

컴파일러에서 멤버에 대한 포인터를 만드는 데 사용되는 구문에 문제가 있습니다.

설명

클래스 형식 대신 인스턴스 변수를 사용하여 멤버를 한정하여 멤버에 대한 포인터를 만들려고 할 때 오류가 C2276 자주 발생합니다. 잘못된 구문을 사용하여 멤버 함수를 호출하려는 경우에도 이 오류가 표시 될 수 있습니다.

예시

이 샘플에서는 C2276이 발생할 수 있는 여러 가지 방법과 이를 해결하는 방법을 보여줍니다.

// C2276.cpp
class A {
public:
   int func(){return 0;}
} a;

int (*pf)() = &a.func;   // C2276
// pf isn't qualified by the class type, and it 
// tries to take a member address from an instance of A.
// Try the following line instead:
// int (A::*pf)() = &A::func;

class B : public A {
public:
   void mf() {
      auto x = &this -> func;   // C2276
      // try the following line instead
      // auto x = &B::func;
   }
};

int main() {
   A a3;
   auto pmf1 = &a3.func;   // C2276
   // try the following line instead
   // auto pmf1 = &A::func;
}