从用户定义的类型到int的词法转换

时间:2013-05-11 07:36:56

标签: c++ boost

我正在尝试使用boost :: lexical_cast将我的用户定义类型转换为整数。 但是,我得到了一个例外。我错过了什么?

class Employee {
private:
    string name;
    int empID;

public:
    Employee() : name(""), empID(-1)
    { }

    friend ostream& operator << (ostream& os, const Employee& e) {
        os << e.empID << endl;      
        return os;
    }
    /*
    operator int() {
        return empID;
    }*/
};

int main() {
    Employee e1("Rajat", 148);
    int eIDInteger = boost::lexical_cast<int>(e1); // I am expecting 148 here.
    return 0;
}

我知道我总是可以使用转换运算符,但只是想知道为什么词法转换在这里不起作用。

1 个答案:

答案 0 :(得分:0)

问题是您在输出流中插入的内容不是整数的表示(因为尾随<< std::endl)。以下内容以类似的方式失败:

boost::lexical_cast<int>("148\n")

删除<< std::endl使其有效:

friend std::ostream& operator << (std::ostream& os, const Employee& e) {
    os << e.empID;
//  ^^^^^^^^^^^^^^
//  Without << std::endl;

    return os;
}