C ++枚举和具有可变数量参数的函数。未知错误

时间:2014-10-26 11:17:04

标签: c++ function enums

这是我的任务:我们可以将这些数据(char,int和float)传递给该函数。在每个组之前,我们必须指定组中的元素数,然后是它们的类型(使用枚举)和数据本身。这些群体可以是任何数量。因此,在整个列表的开头,我们必须指出要处理的组的总数。任务是将数据 ---从 char 转换为 int ,并从 float 转换为 double < /强>

这是我的代码。但是有一个错误。我以前从未见过它: enter image description here

你能帮助我吗?谢谢!

#include "stdafx.h"
#include "iostream"
#include "stdarg.h"
using namespace std;

enum data { Char, Іnt, Float};

int main()
{
    float f1, f2, f3, f4;
    int i1, i2, i3, i4;

    void dіspl(int, int, enum data, ...); 

    do
    {                        
        dіspl(1, 3, Char, 'a', 'b', 'c');    
        cin >> i1 >> i2 >> i3 >> i4;               
        dіspl(2, 4, Іnt, i1, i2, i3, i4, 3, Char, 'a', 'b', 'c');

        cin >> f1 >> f2 >> f3 >> f4 ;
        dіspl(3, 3, Char, 'x', 'z', 't', 3, Іnt, i1, i2, i3, 4, Float, f1, f2, f3, f4);

        cout<<"exіt=0?";
        cin>>i1; 
    } while (i1);

    return 0;
}

// k - count of groups, i - count of elements in first grour, Турe - their type.

void displ(int k, int i, enum data Type, ...){   
    va_list arg;
    va_start(arg, Type);

    while(k--) {
        switch(Type)
        {
            case Char: while(i--)
                cout << va_arg(arg, char) << "     ";  break;
            case Іnt: while (i--)
                cout << va_arg(arg, int) << "     ";  break;    
            case Float: while(i--)       
                cout << va_arg(arg, double) << "    "; break; 
            default:
                cout << "Type=ERROR";
                return;         
        }
        cout << endl;  i =  va_arg(arg, int);
        Type = va_arg(arg, enum data); 

    }

    va_end(arg);
}

2 个答案:

答案 0 :(得分:0)

移动

void dіspl(int, int, enum data, ...); 

以上

int main()

答案 1 :(得分:0)

我的编译器成功编译了它。看起来像编译问题。可能会更好地工作:

void displ(int k, int i, int Type, ...){   
va_list arg;
va_start(arg, Type);

while(k--) {
    switch(Type)
    {
        case Char: while(i--)
            cout << va_arg(arg, char) << "     ";  break;
        case Іnt: while (i--)
            cout << va_arg(arg, int) << "     ";  break;    
        case Float: while(i--)       
            cout << va_arg(arg, double) << "    "; break; 
        default:
            cout << "Type=ERROR";
            return;         
    }
    cout << endl;  i =  va_arg(arg, int);
    Type = va_arg(arg, enum data); 

}

va_end(arg);
}