Delen via


Compilerfout C3867

'func': functieoproep ontbrekende argumentenlijst; gebruik '&func' om een aanwijzer naar lid te maken

Opmerkingen

U hebt geprobeerd het adres van een lidfunctie te gebruiken zonder de lidfunctie te kwalificeren met de klassenaam en het adres van de operator.

Deze fout kan ook worden veroorzaakt als gevolg van compilerconformiteitswerk dat voor Visual Studio 2005 is uitgevoerd: verbeterde conformiteit van pointer-naar-lid. Code die vóór Visual Studio 2005 is gecompileerd, genereert nu C3867.

Voorbeelden

C3867 kan worden uitgegeven vanuit de compiler met een misleidende voorgestelde oplossing. Gebruik waar mogelijk de meest afgeleide klasse.

In het volgende voorbeeld wordt C3867 gegenereerd en ziet u hoe u dit kunt oplossen.

// C3867_1.cpp
// compile with: /c
struct Base {
protected:
   void Test() {}
};

class Derived : public Base {
   virtual void Bar();
};

void Derived::Bar() {
   void (Base::*p1)() = Test;   // C3867
   &Derived::Test;   // OK
}

In het volgende voorbeeld wordt C3867 gegenereerd en ziet u hoe u dit kunt oplossen.

// C3867_2.cpp
#include <stdio.h>

struct S {
   char *func() {
      return "message";
   }
};

class X {
public:
   void f() {}
};

int main() {
   X::f;   // C3867

   // OK
   X * myX = new X;
   myX->f();

   S s;
   printf_s("test %s", s.func);   // C3867
   printf_s("test %s", s.func());   // OK
}

In het volgende voorbeeld wordt C3867 gegenereerd en ziet u hoe u dit kunt oplossen.

// C3867_3.cpp
class X {
public:
   void mf(){}
};

int main() {
   void (X::*pmf)() = X::mf;   // C3867

   // try the following line instead
   void (X::*pmf2)() = &X::mf;
}

In het volgende voorbeeld wordt C3867 gegenereerd.

// C3867_4.cpp
// compile with: /c
class A {
public:
   void f(int) {}

   typedef void (A::*TAmtd)(int);

   struct B {
      TAmtd p;
   };

   void g() {
      B b1;
      b1.p = f;   // C3867
   }
};

In het volgende voorbeeld wordt C3867 gegenereerd.

// C3867_5.cpp
// compile with: /EHsc
#include <iostream>

class Testpm {
public:
   void m_func1() {
      std::cout << m_num << "\tm_func1\n";
    }

   int m_num;
   typedef void (Testpm::*pmfn1)();
   void func(Testpm* p);
};

void Testpm::func(Testpm* p) {
   pmfn1 s = m_func1;   // C3867
   pmfn1 s2 = &Testpm::m_func1;   // OK
   (p->*s2)();
}

int main() {
   Testpm *pTestpm = new Testpm;
   pTestpm->m_num = 10;

   pTestpm->func(pTestpm);
}