回 帖 发 新 帖 刷新版面

主题:请教一下,为什么这里的重载函数不能用

#include<iostream>
using namespace std;
class DataType{
private:
    enum{
        integer,
        character,
        floating_point
    }type;
    union{
        char c;
        int i;
        float f;
    };
public:
    //函数重载
    DataType(char cc){
        type=character;
        c=cc;
    }
    DataType(int ii){
        type=integer;
        i=ii;
    }
    DataType(float ff){
        type=floating_point;
        f=ff;
    }
    void print();
};

void DataType::print(){
    switch(type){
    case integer:
        cout<<"整型"<<i<<endl;
        break;
    case character:
        cout<<"字符型"<<c<<endl;
        break;
    case floating_point:
        cout<<"浮点型"<<f<<endl;
        break;
    }
}
int main(){
    DataType a(144),b('c'),c(3.689);//error C2668: 'DataType::DataType' : ambiguous call to overloaded function
    a.print();
    b.print();
    c.print();
    return 0;
}




回复列表 (共1个回复)

沙发

3.689 是个double类型
而DataType的构造函数接受 char, int, float 类型
编译器不知道你想使用哪个构造函数

所以要么将 DataType(float ff) 改为 DataType(double ff)
要么将 3.689 改为 3.689f

我来回复

您尚未登录,请登录后再回复。点此登录或注册