I’m doing a homework and I’m trying to follow a class diagram. In Book.cpp file wherever the commented text it will cause error saying: Unhandled exception at 0x00CE3F1B in Lab 1.exe: 0xC0000005: Access violation reading location 0xCCCCCD1C.
In following code I don’t know what I should be doing with pointers, I don’t know how I should pass this objects variables into this constructor or what I should be doing with it. I’m so confused with c++. I attached class diagram at the end of this post.
Book::Book(string title, Author *pAuthor, Publisher *pPublisher, double price)
{
setTitle(title);
setPrice(price);
}
Book.cpp file:
#include <iostream>
#include <sstream>
using namespace std;
#include "Book.h"
Book::Book()
{
}
Book::Book(string title, Author *pAuthor, Publisher *pPublisher, double price)
{
setTitle(title);
setPrice(price);
}
void Book::setTitle(string title)
{
this->title = title;
}
void Book::setAuthorName(string first, string last)
{
//pAuthor->setFirstName(first);
//pAuthor->setLastName(last);
}
void Book::setPublisher(string name, string address, string city)
{
//pPublisher->setName(name);
//pPublisher->setAddress(address);
//pPublisher->setCity(city);
}
void Book::setPrice(double price)
{
this->price = price;
}
string Book::convertDoubleToString(double number)
{
return static_cast<ostringstream*>( &(ostringstream() << number) ) -> str();
}
string Book::getBookInfo()
{
return "0"; //title + "\n" + pAuthor->getFullName() + "\n" + pPublisher->getPublisherInfo() + "\n" + "$" + convertDoubleToString(price);
}
Book.h file
#include "Publisher.h"
#include "Author.h"
class Book
{
public:
Book();
Book(string title, Author *pAuthor, Publisher *pPublisher, double price);
~Book();
void setTitle(string title);
void setAuthorName(string first, string last);
void setPublisher(string name, string address, string city);
void setPrice(double price);
string convertDoubleToString(double number);
string getBookInfo();
private:
string title;
double price;
Author *pAuthor;
Publisher *pPublisher;
};
This is what I have in main.cpp
#include <iostream>
#include <string>
using namespace std;
#include "Book.h"
int main()
{
system("cls");
cout << "Book 1" << endl;
Author *pAuthor = new Author("John", "Doe");
Publisher *pPublisher = new Publisher("Wrox", "10475 Crosspoint Blvd.", "Indianapolis");
Book *pBook = new Book("Memory Management", pAuthor, pPublisher, 39.99);
cout << pBook->getBookInfo() << endl;
cout << endl << "Book 2" << endl;
Book book;
book.setTitle("Advanced C++ Programming");
book.setAuthorName("Linda", "Smith");
book.setPublisher("Microsoft Press", "One Microsoft Way", "Redmond");
book.setPrice(49.99);
cout << book.getBookInfo() << endl << endl;
system("pause");
return 0;
};
Author.cpp
#include <iostream>
#include <string>
using namespace std;
#include "Author.h"
Author::Author()
{
}
Author::Author(string first, string last)
{
setFirstName(first);
setLastName(last);
}
string Author::getFullName()
{
return firstName + " " + lastName;
}
void Author::setFirstName(string first)
{
this->firstName = first;
}
void Author::setLastName(string last)
{
this->lastName = last;
}
Publisher.cpp
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
#include "Publisher.h"
Publisher::Publisher()
{
}
Publisher::Publisher(string name, string address, string city)
{
setName(name);
setAddress(address);
setCity(city);
}
string Publisher::getPublisherInfo()
{
return string(name + "\n" + address + "\n" + city);
}
void Publisher::setName(string name)
{
this->name = name;
}
void Publisher::setAddress(string address)
{
this->address = address;
}
void Publisher::setCity(string city)
{
this->city = city;
}
Class Diagram because I’m so lost. I believe I did the structure right and some of passing variables is good. But I just don’t know how to do it with pointers.

It looks like your class object has two pointers, one to the publisher and another to the author that are never been initialized. When you try to call the member functions on those objects you are causing undefined behavior and in particular your application crashes.