The short version: the example code is broken and the errata for the book doesn't list this. The 2010 edition of the book goes into much more detail, but even that code is still broken.
The fix seems to be either:
inside of bottle.h or
Code:
friend class CCarton
inside of the CBottle class.
This looks like:
Code:
#pragma once
#include "carton.h"
class CBottle
{
public:
CBottle(double height, double diameter);
private:
double m_Height; // Bottle height
double m_Diameter; // Bottle diameter
// Let the carton constructor in
friend CCarton::CCarton(const CBottle& aBottle);
};
or
Code:
#pragma once
class CBottle
{
friend class CCarton;
public:
CBottle(double height, double diameter);
private:
double m_Height; // Bottle height
double m_Diameter; // Bottle diameter
};
respectively.
More info available on the cboard forums
here.
P.S.
Both page 530 (2008 edition) and page 571 (2010 edition) have the syntax for adding a friend declaration within the CBottle class definition wrong:
when it should be (at least according to other resources):
Code:
friend class CCarton
Hope that helps someone.