2

我正在尝试使用 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;
}

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

4

1 回答 1

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;
}
于 2013-05-11T08:07:08.490 回答