C++: The Core Language by Gregory Satir and Doug Brown This errata page lists errors outstanding in the most recent printing. If you have technical questions or error reports, you can send them to booktech@oreilly.com. Please specify the printing date of your copy. This page was last modified on March 26, 2007. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification Confirmed errors: [xvi] Obtaining Online Examples; Find examples at: http://examples.oreilly.com/core/ (3) para. 4, line 1; "astraction" should be "abstraction" [15] next-to-last para.; The variable "d2" is declared twice in the same program. the 2nd one should be d3 (15) last para.; "initialize d2 ad d3" should be "initialize d2 and d3". {66} 2nd para. (not incl. code); This "minor technical mistake" is a publishing error, not an error in C++. The word "member" is in mono-spaced font when it should be in the normal font {109} Fourth line of code in advanced topic box; There is an extra comma after the last item in the member initialization list: frameThickness(source.frameThickness), // data member should read: frameThickness(source.frameThickness) // data member {125} 2/3 the way down the page; void Id::operator=(Id src) { should be void Id::operator=(Id &src) { if (this == ) return; // don't assign to self should be if (this == &src) return; // don't assign to self Id::Id(Id src) { should be Id::Id(Id &src) { {129} the code block at the top of the page; void Id::operator=(Id src) { should be void Id::operator=(Id &src) { Id::Id(Id src) { should be Id::Id(Id &src) { {129} code in the middle of the page; *os "Id{" data "-->"; should be *os << "Id{" << data << "-->"; *os "(null)"; should be *os << "(null)"; *os *data"; should be data->print(os); To get the same output like the end of this page, we should modify the original print function to: void IdData::print(ostream *os) { *os << "IdData{" << value << ", refCount = " << refCount << '}'; } {129} 2nd paragraph The printing operator operator() is identical to what you've.... should be The printing operator operator<<() is identical to what you've.... [129] Last but one para in the Id::set function; void Id::set(char *idStr) { if ( data->refCount > 1 ) attachData(0); data->set(idStr); } should read: void Id::set(char *idStr) { if ( data->refCount > 1 ) { detachData(); attachData(0); } data->set(idStr); } NOTE: This has been corrected in the current version. [140] last paragraph; 'We've also changed anArray.getElem(5).sanitize to ...' should be: 'We've also changed anArray.getElem(5).sanitize() to ...' (152) 3rd paragraph; Third line down, there is a comma that should be a period. ...being invoked, If you are invoking... should read ...being invoked. If you are invoking... (200) last para.; "It`s also good idea" should be "It`s also a good idea".