Now that it compiles, time to make it work (correctly), and make it right.
1) Your Item operator!= is just plain wrong. Hint: if the name matches, but the sound and inRoom don't, are the items equal?
Sometimes it's useful to be able to implement *all* of the relational operators, so that e.g. you can sort them. I like to do this by implementing a common 'cmp' (compare) function, which returns a value like what the C strcmp() does, and writing the operators in terms of the cmp result.
2) Your Room constructor taking 8 booleans is pretty brutal. Storing the booleans as 8 separate members is brutal too. Store an array, accept an array (copying in the values), and turn the names into enumeration values (then it would make sense to have them in uppercase; using uppercase for data members looks odd); you'll use them to index into the array.
3) Having a hard limit on the number of lines is not very nice. Especially since you have a static-sized array and then have to count the number of "used items" separately. Use a vector (or other container, but I will use vector) instead. It's also pretty ugly to have all those separate overloads for setting the description. It wouldn't be very nice to expect the client code to match up with your choice of storage container, but there's a simple way to handle this: accept an "iterator range" instead. That is, two arguments of some (templated) iterator type, which indicate the beginning and end of the sequence of lines to use.
4) Having the separate setting functions to initialize stuff after the constructor really isn't called for here - especially with the other changes above implemented first. You should aim to make your constructors be "complete".
5) Use initializer lists. Please.
6) This is C++, so don't use the "typedef struct idiom". Even for structs.
7) You should factor out that switch pausing logic into a separate function; you're likely to need it a lot, if this is the sort of project I think it is. Also, you don't have it quite right. :)
8) Don't implement destructors when they don't actually do anything.
9) Your headers should include the headers that are needed to make them compile
(and only those).
10) Make data members private where you can.
11) You should assign the values true and false to bools, rather than 0 and 1. You should not compare them to literal constants at all.
12) "Sound" is a weird name for the function that shows a text description of a room. Oh, and the way you implemented that function is really, really strange. Haven't you heard of a for loop?
13) Don't include the _H and _CPP in your *file names*. That's just redundant. The file extension already carries that information.
//classes.h#ifndef classes_H#define classes_H#include <string>#include <vector>struct Item { std::string Name; //Name of the Item std::string Sound; //Words given when item is used int InRoom; //Room number inwhich this item is used};inline int cmp(const Item& a, const Item& b) { if (a.Name < b.Name) { return -1; } if (a.Name > b.Name) { return 1; } if (a.Sound < b.Sound) { return -1; } if (a.Sound > b.Sound) { return 1; } return a.InRoom - b.InRoom;}inline bool operator == (const Item & a, const Item & b) { return cmp(a, b) == 0;}inline bool operator != (const Item & a, const Item & b) { return cmp(a, b) != 0;}class Room { std::vector<std::string> Text; std::string Area; //The name of the area the room is in (example: 'Central cave') Item RoomItem; //Holds what item is in the room int RoomNum; //Holds the room's ID number bool directions[8]; public: enum { NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, NORTHWEST, UP, DOWN } direction_t; template <typename InputIterator> Room(bool directions[8], InputIterator begin_line, InputIterator end_line, const std::string& Area, const Item& RoomItem, int RoomNum) : Area(Area), RoomItem(RoomItem), RoomNum(RoomNum); Room(); void Show();};class Switch { bool Resettable; // can the switch be turned back off if it is on? bool Active; // is the switch on? std::string OnSound; //Words given to the player upon pulling the switch. std::string OffSound; //Words given the player upon turning off the switch public: Switch(std::string OnSound, std::string OffSound = "") : OnSound(OnSound), OffSound(OffSound), Resettable(OffSound != ""), Active(true) {} void Pull();};//classes.cpp#include <iostream>#include <limits>#include "classes.h"void pause() { // Throw away any as-yet unparsed input std::cin.ignore(std::numeric_limits<streamsize>::max(), '\n'); // Block until we get some input std::cin.get(); // Throw that input away std::cin.ignore(std::numeric_limits<streamsize>::max(), '\n');}void Switch::Pull() { if (!Active) { Active = true; std::cout << OnSound << std::endl; pause(); } else if (Resettable) { Active = false; std::cout << OffSound << std::endl; pause(); }}template <typename InputIterator>Room(bool directions[8], InputIterator begin_line, InputIterator end_line, const std::string& Area, const Item& RoomItem, int RoomNum) : Area(Area), RoomItem(RoomItem), RoomNum(RoomNum) { std::copy(directions, directions + 8, this->directions); std::copy(begin_line, end_line, back_inserter(Text));}Room::Room() { std::fill(directions, directions + 8, false);}void Room::Show() { for (std::vector<std::string>::iterator it = Text.begin(); it != Text.end(); ++it) { std::cout << *it << std::endl; }}