Daily Archives: December 23, 2010

函数指针传递变长参数的问题

一个例子,编译不通过。

//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

得到预期结果。