va_start(objvalist, in_nFirst);
这句是把可第一个可变参数(一般是第二个)的值赋给in_nFirst,你写这段代码是这个意思吗?
能不能说清楚一点程序的目的?

解决方案 »

  1.   

    我希望的功能是可以用可变参数列表来实现一个集合类的创建
    就是将在参数中列表中的所有参数作为这个集合的所有元素
    我的代码几乎就是照抄MSDN上的例子
    不知为什么会产生这样的错误!
      

  2.   

    刚刚将MSDN上的例子放到我的程序里也是不行!
    MSDN上是average(...);
    我在每次加起来前将传入的参数打印出来
    我调用average(1,2,3);
    但是打印的参数为,1,2,3,...
      

  3.   

    这段代码这样改:
    createSet不变,仍旧是判断到-1时结束。
    void Set :: insertItems(int in_nFirst, ...)
    {
    int i = in_nFirst;
    va_list objvalist;
    va_start(objvalist, in_nFirst);
    //这里
    while( i ){
    //改为while(i != -1),也用-1来结束
    int nPos = 0;
    int nTempValue = 0;
    while((nTempValue = getAt(nPos ++)) != NULL){
    if(nTempValue > i){
    break;
    }
    }// END while((nTempValue = getAt(nPos ++)) != -1)
    this->insertAt( i, --nPos );
    i = va_arg( objvalist, int);
    }// END while( in_nFirst )
    va_end(objvalist);
    }// END insertItems(int in_nFirst, ...)调用时最后一个参数要为-1.
    objSet.createSet(1,2,3, -1);
    调用insertItems时也是用-1来做最后一个参数。
      

  4.   

    但是可变参数的函数一般要求第一个做可变参数的总个数,比如:
    object.createSet(4,1,2,3,4)
    这样就好判断多了。
      

  5.   

    我明白了
    虽然是可变参数,但是什么时候可变参数结束是需要自己判断的
    我仔细看了MSDN上的例子,它调用时是average(1,2,3,-1);
    我明白了,谢谢各位指点