- pg25,29,99,194 s/stream.h/iostream/
-
- pg39 s/cs.pop()/s.pop()/
-
- pg64,99,116,119 s/main()/int main()/
-
- pg71 s/unsigned/unsigned int/ in struct sreg
-
-
pg85,86,87 s/"\n"/'\n'/
-
pg99 #include <stdlib.h> (to get the declaration of exit())
-
pg112 s/struct S { int a; char b; }/struct S { int a; char b; };/
-
pg116,118 s/const TBLSZ/const int TBLSZ/
-
pg141 s/r.8.5/r.9.3/
-
pg152 s/delete s;/delete[] s;/
-
pg156 s/delete n->string;/delete[] n->string;/
-
pg158 main() should be
int main(int argc, char *argv[])
{
if (argc != 3) error("two arguments expected");
int count = 0;
int m = atoi(argv[1]); // number of set members
int n = atoi(argv[2]); // in the range 1..n
intset s(m,n);
while (count<m) {
int t = randint(n);
if (s.member(t)==0) {
s.insert(t);
count++;
}
}
print_in_order(&s);
}
-
pg159 s/delete x;/delete[] x;/
-
pg170 function error(): name the arguments a1,a2, and a3
-
pg191 s/rotate::shape/shape::rotate/
-
pg191 s/rotate::draw/shape::draw/
-
pg193 s/class character_device {/class character_device { public:/
-
pg195 delete first definition of on_screen(). (it is a duplicate)
-
pg197 s/point sw, ne;/class rectangle : public shape { point sw, ne;/
-
pg203 s/pending()/pending();/
-
pg204 for dip, dip1, and dip2 s/debug_info/debug_info*/
-
pg204 s/dip.merge/dip->merge/
-
pg205,206 s/mamager::/manager::/
-
pg208 s/from the work done from the base class./
- from the work done from the derived class./
-
pg210,211 s/: public virtual window public window_w_input/: public virtual window, public window_w_input,/
-
pg218 s/void copy(expr* s);/void copy(expr* s, deep = 0);/
-
pg219 s/left = s->clone(1);/left = s->left->clone(1);/
-
pg219 s/right = s->clone(1);/right = s->right->clone(1);/
-
-
pg220 s/conditional::copy(expr* s, int deep)/
- conditional::copy(conditional* s, int deep)/
-
-
pg228 s/ivate:/private:/
-
-
pg229 s/trivially handled using friend functions/
-
trivially handled using nonmember functions/
-
pg231 s/return this;/return *this;/
-
-
pg237 s/delete p;/delete[] p;/
-
-
pg241 s/max = (s<16) ? s : 16;/max = (s<16) ? 16 : s;/
-
-
pg243 s/assoc* cs;/const assoc* cs;/
-
-
pg262 s/insert(T&/insert(const T&/
-
-
pg262 s/append(T&/append(const T&/
-
-
pg262 s/lnk.info/lnk->info/
-
-
pg263 s/lst1.insert(*p)/lst1.insert(p)/
-
-
pg265 the declaration of Isplist should be
template<class T>
class Isplist : private slist_base {
public:
void insert(T* p) { slist_base::insert(p); }
void append(T* p) { slist_base::append(p); }
T* get() { return (T*) slist_base::get(); }
};
-
pg277 the declaration of the sort function should be
template<class T, class Comp> void Sort<T,Comp>::sort(Vector<T>& v)
{
for (int i=0; i<n-1; i++)
for (int j=n-1; i<j; j--)
if (Comp::lessthan(v[j],v[j-1])) {
T temp = v[j];
v[j] = v[j-1];
v[j-1] = temp;
}
}
-
pg280 the examples should be
template<class T> void f1(T); // fine
template<class T> void f2(T*); // fine
template<class T> T f3(int); // error
template<int i> void f4(int[][i]); // error
template<int i> void f5(int = i); // error
template<class T, class C> void f6(T); // error
template<class T> void f7(const T&, complex); // fine
template<class T> void f8(Vector< List<T> >); // fine
-
pg306 s/mp.debug_print()/m.debug_print()/
-
-
pg306 first paragraph s/Int_overflow's debug()/Int_overflow's debug_print()/
-
-
pg329 s/"("/'('/
-
s/","/','/
s/")"/')'/
-
pg335,336 s/,istream&,ostream&)/,cin,cout)/
-
pg340,341,342 s/10.4.2.7/10.4.2.1/
-
pg346,347 s/return f(os,i)/return m.f(os,m.i)/
-
-
pg355 the declarations of streambuf and filebuf should be
class streambuf { // manage a stream buffer
protected:
char* base; // start of buffer
char* pptr; // next free char
char* gptr; // next filled char
char* eptr; // one off the end of buffer
char alloc; // buffer allocated by "new"
// ...
// Empty a buffer:
// Return EOF on error, 0 on success
virtual int overflow(int c =EOF);
// Fill a buffer:
// Return EOF on error or end of input,
// next char otherwise
virtual int underflow();
// ...
public:
streambuf();
streambuf(char* p, int l);
virtual ~streambuf();
int snextc() // get the next char
{
return (++gptr==pptr) ? underflow() : *gptr&0377;
}
int allocate(); // allocate some buffer space
// ...
};
class filebuf : public streambuf {
protected:
int fd; // file descriptor
char opened; // file opened
public:
filebuf() { opened = 0; }
filebuf(int nfd, char* p, int l)
: streambuf(p,l) { /* ... */ }
~filebuf() { close(); }
int overflow(int c =EOF);
int underflow();
filebuf* open(char *name, ios::open_mode om);
int close() { /* ... */ }
// ...
};
-
pg409 s/C(int i)/C2(int i)/
-
-
pg409 s/~C()/~C2()/
-
-
pg410 s/C(X* q)/C3(X* q)/
-
-
pg410 s/C(X& q)/C4(X& q)/
-
-
pg418 add `int size() { return sz; }' as a public mermber of String
-
-
pg419 s/Assert(i<0 && i<s.size()/Assert(0<=i && i<size()/
-
-
pg435 s/: private array/: private vector/
-
-
pg438 add `virtual ~iter();' to the declaration of class iter
-
-
pg438 s/istream& is/istream& is;/
-
-
pg453 s/operator[](int)/operator[](int);/
-
-
pg467 s/Map<void*,void(*)()> m;/Map<void*,void(*)(void*)> m;/
-
-
pg472 s/, count(new int)/, pcount(new int)/
-
-
pg473 the declaration of class X should be
class X {
static Pool my_pool;
// ...
public:
// ...
void* operator new(size_t) { return my_pool.alloc(); }
void operator delete(void* p) { my_pool.free(p); }
};
Pool X::my_pool(sizeof(X));
-
pg473 s/class Link/struct Link/
-
pg474 the definition of the constructor should be
-
Pool::Pool(unsigned sz)
: esize(sz)
{
head = 0;
}
-
pg474 s/const overhead = 12/const int overhead = 12;/
-
in the index: every reference to the manual proper refers to page n
where it
- should refer to page n-1
People have been polite enough not to inquire how so many errors
could creep in. In the case of most non-stylistic bugs, the answer
is in trouble with the software that inserts fragments of the tested
code examples into the text.