Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
"func": funktionsanrop som saknar argumentlista; använd "&func" för att skapa en pekare till medlem
Anmärkningar
Du försökte ta adressen till en medlemsfunktion utan att kvalificera medlemsfunktionen med dess klassnamn och operatorns adress.
Det här felet kan också genereras som ett resultat av kompilatoröverensstämmelsearbete som utfördes för Visual Studio 2005: förbättrad pekare-till-medlem-överensstämmelse. Kod som kompilerades före Visual Studio 2005 genererar nu C3867.
Examples
C3867 kan genereras från kompilatorn med en vilseledande föreslagen lösning. Använd den mest härledda klassen när det är möjligt.
I följande exempel genereras C3867 och hur du åtgärdar det.
// 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
}
I följande exempel genereras C3867 och hur du åtgärdar det.
// 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
}
I följande exempel genereras C3867 och hur du åtgärdar det.
// 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;
}
I följande exempel genereras C3867.
// 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
}
};
I följande exempel genereras C3867.
// 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);
}