一个例子,编译不通过。
//test.h
#include <cstdarg>
class Test
{
public:
// int A();
int B(int a1,int(*Func)(int b1,va_list ap),…);
int C(int b1,va_list ap);
};
//test.cpp
#include “test.h”
int Test::B(int a1,int(*Func)(int b1,va_list ap),…)
{
va_list ap;
va_start(ap,Func);
int f=Func(a1,ap);
va_end(ap);
return f;
}
int Test::C(int b1,va_list ap)
{
int a=(int)va_arg(ap,int);
int b=(int)va_arg(ap,int);
int c=(int)va_arg(ap,int);
return a+b+c;
}
//main.cpp
#include <iostream>
#include <test.h>
int main()
{
Test t;
// std::cout<<t.A()<<std::endl;
std::cout<<t.B(3,t.C,4,5,6)<<std::endl;
return 0;
}
编译提示Unresolved overloaded type 之类的错误。
解决方法:
int C(int b1,va_list ap); 必须声明为 static
得到预期结果。