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 に答える