## BobC22

Hi,

I am going to be attending university next year on a coding course, I am currently working through an exercise in the Deitel book How To Program and I have encountered some errors in my program. Any help would be much appreciated.

Bob

Here is my code

cube.h

``````#include "cube.h"

#include <iostream>
using std::cout;

//Write the constructor for Cube class

Cube::Cube(double s, double x, double y)
: ThreeDimensionalShape( x, y) { sideLength = s > 0 ? s : 0; }

double Cube::area() const { return 6 * sideLength * sideLength; }

double Cube::volume() const
{ return sideLength * sideLength * sideLength; }

double Cube::getSideLength() const { return sideLength; }

void Cube::print() const
{
cout << "Cube with side length " << sideLength << "; center at ("
<< xCenter << ", " << yCenter << ");\narea of "
<< area() << "; volume of " << volume() << '\n';
}``````

shape.h

``````#ifndef SHAPE_H
#define SHAPE_H

#include <iostream>
using namespace std;

class Shape {
friend ostream & operator<<( ostream &, Shape & );
public:
Shape( double = 0, double = 0 );
double getCenterX() const;
double getCenterY() const;

//Write virtual pure print function

virtual void print() const = 0;

protected:
double xCenter;
double yCenter;
};

#endif``````

square.h

``````#ifndef SQUARE_H
#define SQUARE_H

#include "twodim.h"

// write statement for square public inheritance from 2-dimensional class
class Square : public TwoDimensionalShape {

public:
Square( double = 0, double = 0, double = 0 );
double getSideLength() const;
double area() const;
void print() const;
private:
double sideLength;
};

#endif``````

threedim.h

``````#ifndef THREEDIM_H
#define THREEDIM_H

#include "shape.h"

class ThreeDimensionalShape : public Shape {
public:

// Write the constructor for 3-dimensional shape
ThreeDimensionalShape( double = 0, double = 0);

// declare a pure virtual member function area

virtual double area() const = 0;

// declare a pure virtual member function volume
virtual double volume() const = 0;

};

#endif``````

twodim.h

``````#ifndef TWODIM_H
#define TWODIM_H

#include "shape.h"

class TwoDimensionalShape : public Shape {
public:

// Write the constructor for 2-dimensional shape and declare
// pure virtual member functions area

TwoDimensionalShape( double = 0.0, double = 0.0 );
// declare pure virtual member functions area
virtual double area() const = 0;

};

#endif``````

main.cpp

``````#include <iostream>

using namespace std;

#include "square.h"
#include "cube.h"

int main()
{
Square sqr( 12, 2, 2 );
Cube cub( 2.2 );
Shape *ptr[ 2 ] = { &sqr, &cub };

for ( int x = 0; x < 2; ++x )
cout << *( ptr[ x ] ) << '\n';

return 0;
}``````

cube.cpp

``````#include <iostream>

using namespace std;

#include "square.h"
#include "cube.h"

int main()
{
Square sqr( 12, 2, 2 );
Cube cub( 2.2 );
Shape *ptr[ 2 ] = { &sqr, &cub };

for ( int x = 0; x < 2; ++x )
cout << *( ptr[ x ] ) << '\n';

return 0;
}``````

shape.cpp

``````#include "shape.h"

Shape::Shape( double x, double y )
{
xCenter = x;
yCenter = y;
}

double Shape::getCenterX() const { return xCenter; }

double Shape::getCenterY() const { return yCenter; }

ostream & operator<<( ostream &out, Shape &s )
{
s.print();
return out;
}``````

square.cpp

``````#include "square.h"

#include <iostream>
using std::cout;

Square::Square( double s, double x, double y )
: TwoDimensionalShape( x, y ) { sideLength = s > 0 ? s : 0; }

double Square::getSideLength() const { return sideLength; }

double Square::area() const {

// write the code for calculating the area of a square
return sideLength * sideLength;

}

void Square::print() const
{
cout << "Square with side length " << sideLength << "; center at ("
<< xCenter << ", " << yCenter << ");\narea of " << area() << '\n';
}``````

Please post the nature of your errors ( syntax, logical, segfault, etc ) as well as your compiler/application output.

## BobC22

error LNK2019: unresolved external symbol "public: __thiscall TwoDimensionalShape::TwoDimensionalShape(double,double)"

error LNK2019: unresolved external symbol "public: __thiscall ThreeDimensionalShape::ThreeDimensionalShape(double,double)"

## firstPerson 761

Did you define them? Also why does ThreeDimensionalShape only store 2
values. Also there is some serious problems with your inheritance diagram.
Take another look at the shape class. Look at what it stores. Look at
what you need for each class.