0
#include <iostream>
#include <string>

class DVD {
public:
    char m_strTitle[25];
    int m_nYearOfRelease;
    char m_strGenre[25];
    char m_strRentalStatus[50];
}

void Print()
{
    using namespace std;
    cout << "Title" << DVD::m_strTitle << "YearOfRelease" << DVD::m_nYearOfRelease << "Genre" << DVD::m_strGenre
         << "RentalStatus" << DVD::m_strRentalStatus << endl;
}

This is my first file that generates 5 invalid use of non-static data member errors, and im not quite sure what that means, so if someone could point me in the right direction that would be appreciated. I also want to combine it with another file in which i declare 10 DVD types, normally i would put them all as one file but the question that i am required to do for my assignment asks that i create an array of 10 DVDs and fill them using info from an input file, so here is the input file that i made as well.

#include <iostream>
#include <cstring>

// Set the Info for 10 DVDs
void SetInfo(const char* strTitle, int nYearOfRelease, const char* strGenre, const char* strRentalStatus) {
    strncpy(m_strTitle, strTitle, 25);
    m_nYearOfRelease = nYearOfRelease;
    strncpy(m_strGenre, strGenre, 25);
    strncpy(m_strRentalStatus, strRentalStatus, 50);
}

int main() {
    // Declare 10 DVDs
    DVD cInception;
    cInception.SetInfo("Inception", 2010, "Action", "In stock");

    DVD cFightClub;
    cFightClub.SetInfo("Fight Club", 1999, "Action/Suspense", "Due back November12th");

    DVD cPulpFiction;
    cPulpFiction.SetInfo("Pulp Fiction", 1994, "Action", "In Stock");

    DVD cTheDarkKnight;
    cTheDarkKnight.SetInfo("The Dark Knight", 2008, "Drama", "In Stock");

    DVD cAmericanHustle;
    cAmericanHustle.SetInfo("American Hustle", 2013, "Drama", "Due back December1st");

    DVD cSilverLiningsPlaybook;
    cSilverLiningsPlaybook.SetInfo("Silver Linings Playbook", 2012, "Drama/Romance", "In Stock");

    DVD cTheHungerGames;
    cTheHungerGames.SetInfo("The Hunger Games", 2012, "Adventure", "Due Back Today at 12pm");

    DVD cFurious7;
    cFurious7.SetInfo("Furious 7", 2015, "Action", "One Left in Stock");

    DVD cSavingPrivateRyan;
    cSavingPrivateRyan.SetInfo("Saving Private Ryan", 1998, "Drama/War", "Discontinued");

    DVD cGladiator;
    cGladiator.SetInfo("Gladiator", 2000, "Action", "In Stock");

    // Print out DVD Info
    cInception.Print();
    cFightClub.Print();
    cPulpFiction.Print();
    cTheDarkKnight.Print();
    cAmericanHustle.Print();
    cSilverLiningsPlaybook.Print();
    cTheHungerGames.Print();
    cFurious7.Print();
    cSavingPrivateRyan.Print();
    cGladiator.Print();

    return0;
}
LogicStuff
  • 19,397
  • 6
  • 54
  • 74

3 Answers3

1

You need to move void Print() {...} definition into the DVD class definition, so it can act as a member function. You won't need DVD:: prefixes for each member then.

Regarding the files: The simplest way to get it work is to put the fist code snippet into a header file, the second is your source file, where you #include that header.

You're also forgetting ; after the class definition, I see return0;, and at this point, I'm stopping to look further.

LogicStuff
  • 19,397
  • 6
  • 54
  • 74
0

You have to either move your Print() definition into the DVD definition, or declare it inside the DVD definition and add the DVD:: prefix before Print().

Mykola
  • 3,343
  • 6
  • 23
  • 39
0

You cannot use DVD class members in that context to deal with issue you must rebuild your Print function in that principe to specify it as DVD class member the same is for SetInfo function.

void DVD::Print()
{
     using namespace std;
     cout << "Title" << m_strTitle << "YearOfRelease" << m_nYearOfRelease << "Genre" << m_strGenre <<
     "RentalStatus" << m_strRentalStatus << endl;
}

The entire declaration-defenition code.

#include <iostream>
#include <string>

class DVD 
{
    public:
    char m_strTitle[25];
    int m_nYearOfRelease;
    char m_strGenre[25];
    char m_strRentalStatus[50];
    void Print();
    void SetInfo(const char *strTitle, int nYearOfRelease, const char *strGenre, const char *strRentalStatus);
};

void DVD::Print()
{
     using namespace std;
     cout << "Title" << m_strTitle << "YearOfRelease" << m_nYearOfRelease << "Genre" << m_strGenre <<
     "RentalStatus" << m_strRentalStatus << endl;
}

// Set the Info for 10 DVDs
// Also DVD class member function
void DVD::SetInfo(const char *strTitle, int nYearOfRelease, const char *strGenre, const char *strRentalStatus) 
{
     strncpy(m_strTitle, strTitle, 25);
     m_nYearOfRelease = nYearOfRelease;
     strncpy(m_strGenre, strGenre, 25);
     strncpy(m_strRentalStatus, strRentalStatus, 50);
}

int main()
{
     //Declare 10 DVDs
     DVD cInception;
     cInception.SetInfo("Inception", 2010, "Action", "In stock");

     DVD cFightClub;
     cFightClub.SetInfo("Fight Club", 1999, "Action/Suspense", "Due back November12th");

     DVD cPulpFiction;
     cPulpFiction.SetInfo("Pulp Fiction", 1994, "Action", "In Stock");

     DVD cTheDarkKnight;
     cTheDarkKnight.SetInfo("The Dark Knight", 2008, "Drama", "In Stock");

     DVD cAmericanHustle;
     cAmericanHustle.SetInfo("American Hustle", 2013, "Drama", "Due back December1st");

     DVD cSilverLiningsPlaybook;
     cSilverLiningsPlaybook.SetInfo("Silver Linings Playbook", 2012, "Drama/Romance", "In Stock");

     DVD cTheHungerGames;
cTheHungerGames.SetInfo("The Hunger Games", 2012, "Adventure", "Due Back Today at 12pm");

     DVD cFurious7;
     cFurious7.SetInfo("Furious 7", 2015, "Action", "One Left in Stock");

     DVD cSavingPrivateRyan;
     cSavingPrivateRyan.SetInfo("Saving Private Ryan", 1998, "Drama/War", "Discontinued");

     DVD cGladiator;
     cGladiator.SetInfo("Gladiator", 2000, "Action", "In Stock");

     //Print out DVD Info

     cInception.Print();
     cFightClub.Print();
     cPulpFiction.Print();
     cTheDarkKnight.Print();
     cAmericanHustle.Print();
     cSilverLiningsPlaybook.Print();
     cTheHungerGames.Print();
     cFurious7.Print();
     cSavingPrivateRyan.Print();
     cGladiator.Print();

     return 0; // fix return statement member
}

To create your program as different translation units.

The class declaration must be in DVD.h

#ifndef __DVD_H__
#define __DVD_H__

#include <iostream>
#include <string>

class DVD 
{
    public:
    char m_strTitle[25];
    int m_nYearOfRelease;
    char m_strGenre[25];
    char m_strRentalStatus[50];
    void Print();
    void SetInfo(const char *strTitle, int nYearOfRelease, const char *strGenre, const char *strRentalStatus);
};

#endif /* __DVD_H__ */

Defenition of DVD class methods in DVD.cpp

#include "DVD.h"

void DVD::Print()
{
     using namespace std;
     cout << "Title" << m_strTitle << "YearOfRelease" << m_nYearOfRelease << "Genre" << m_strGenre <<
     "RentalStatus" << m_strRentalStatus << endl;
}

// Set the Info for 10 DVDs
// Also DVD class member function
void DVD::SetInfo(const char *strTitle, int nYearOfRelease, const char *strGenre, const char *strRentalStatus) 
{
     strncpy(m_strTitle, strTitle, 25);
     m_nYearOfRelease = nYearOfRelease;
     strncpy(m_strGenre, strGenre, 25);
     strncpy(m_strRentalStatus, strRentalStatus, 50);
}

than in main.cpp

#include <iostream>
#include <string>
#include "DVD.h"

int main()
{
     //Declare 10 DVDs
     DVD cInception;
     cInception.SetInfo("Inception", 2010, "Action", "In stock");

     DVD cFightClub;
     cFightClub.SetInfo("Fight Club", 1999, "Action/Suspense", "Due back November12th");

     DVD cPulpFiction;
     cPulpFiction.SetInfo("Pulp Fiction", 1994, "Action", "In Stock");

     DVD cTheDarkKnight;
     cTheDarkKnight.SetInfo("The Dark Knight", 2008, "Drama", "In Stock");

     DVD cAmericanHustle;
     cAmericanHustle.SetInfo("American Hustle", 2013, "Drama", "Due back December1st");

     DVD cSilverLiningsPlaybook;
     cSilverLiningsPlaybook.SetInfo("Silver Linings Playbook", 2012, "Drama/Romance", "In Stock");

     DVD cTheHungerGames;
cTheHungerGames.SetInfo("The Hunger Games", 2012, "Adventure", "Due Back Today at 12pm");

     DVD cFurious7;
     cFurious7.SetInfo("Furious 7", 2015, "Action", "One Left in Stock");

     DVD cSavingPrivateRyan;
     cSavingPrivateRyan.SetInfo("Saving Private Ryan", 1998, "Drama/War", "Discontinued");

     DVD cGladiator;
     cGladiator.SetInfo("Gladiator", 2000, "Action", "In Stock");

     //Print out DVD Info

     cInception.Print();
     cFightClub.Print();
     cPulpFiction.Print();
     cTheDarkKnight.Print();
     cAmericanHustle.Print();
     cSilverLiningsPlaybook.Print();
     cTheHungerGames.Print();
     cFurious7.Print();
     cSavingPrivateRyan.Print();
     cGladiator.Print();

     return 0; // fix return statement member
}

to work with file we must define new DVD class method

// Defile new class method
void DVD::SetInfo(std::istream& stream) 
{         
     // Read title
     stream.getline(m_strTitle, 25);
     // Read year of release
     stream >> m_nYearOfRelease 
     // Read genre
     stream.getline(m_strGenre, 25);
     // Read rental status
     stream.getline(m_strRentalStatus, 50);
}

so in main.cpp we got this

#include <iostream>
#include <string>
#include "DVD.h"

int main()
{
     std::ifstream input_file("filename.txt");
     DVD cInception;
     cInception.SetInfo(input_file);

     DVD cFightClub;
     cFightClub.SetInfo(input_file);

     DVD cPulpFiction;
     cPulpFiction.SetInfo(input_file);

     DVD cTheDarkKnight;
     cTheDarkKnight.SetInfo(input_file);

     DVD cAmericanHustle;
     cAmericanHustle.SetInfo(input_file);

     DVD cSilverLiningsPlaybook;
     cSilverLiningsPlaybook.SetInfo(input_file);

     DVD cTheHungerGames;
     cTheHungerGames.SetInfo(input_file);

     DVD cFurious7;
     cFurious7.SetInfo(input_file);

     DVD cSavingPrivateRyan;
     cSavingPrivateRyan.SetInfo(input_file);

     DVD cGladiator;
     cGladiator.SetInfo(input_file);

     //Print out DVD Info

     cInception.Print();
     cFightClub.Print();
     cPulpFiction.Print();
     cTheDarkKnight.Print();
     cAmericanHustle.Print();
     cSilverLiningsPlaybook.Print();
     cTheHungerGames.Print();
     cFurious7.Print();
     cSavingPrivateRyan.Print();
     cGladiator.Print();

     return 0; // fix return statement member
}
Mykola
  • 3,343
  • 6
  • 23
  • 39
  • Thank you, my code now works and compiles fine and displays what i desire, however what could it mean when my instructor wants me to test it using an input file, i am a little unclear on this – Scott Glendenning Nov 16 '15 at 23:37
  • @Scott Glendenning: I am unclear too. May be he or she wants to load input data about DVDs from file. – Mykola Nov 16 '15 at 23:40
  • How would i accomplish this, loading the input data about DVDs from file? – Scott Glendenning Nov 16 '15 at 23:43
  • Its like inputing from cin. The only difference is you must create object like cin explicity `std::istream file_cin("filename")` so to load info integer from file you could call `file_cin >> `. Other operations is like you did with `cin`. – Mykola Nov 16 '15 at 23:47
  • The input values you could type in some sort of simple text file like `*.txt` – Mykola Nov 16 '15 at 23:50
  • So instead of in 'int main()' declaring 10 DVD's i put 'std::istream file_cin("filename.txt")' as my main function? With the text file containing all the required info for my DVD – Scott Glendenning Nov 17 '15 at 00:03