We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

c++ class & emun

ljmiller
ljmiller asked
on
Medium Priority
540 Views
Last Modified: 2006-11-17
I am a beginner using boreland C++ and am trying to learn out of a book. Using enum and class, i need to create a class decleration for a traffic light. Assume the light can be in one of three states: green, amber, or red. We should be able to check this state or change it. Please help me by creating this class.   thank you ljmiller@cppj.net
Comment
Watch Question

Commented:
// start header file
class CLight {
protected:
int m_nLightState;
public:
enum STATE {
S_GREEN = 0,
S_AMBER .
S_RED
};
CLight(){};
CLight (intt state ) {m_nLightState = state;};
inline void SetState(int state) {m_nLightState = state;};
inline int GetState const {return m_nLightState};
};

// Start using class
{
CLight lt(lt::S_RED);
lt.SetState(lt:S_AMBER);
....
Thats all

Author

Commented:
the class must not have been ran on boreland c++, because it was full of errors likeCompiling NONAME00.CPP:
Error NONAME00.CPP 10: Storage class 'inline' is not allowed here
Error NONAME00.CPP 10: Declaration missing ;
Error NONAME00.CPP 14: Declaration terminated incorrectly

Commented:
check CLight (intt state ) {m_nLightState = state;};
to
CLight (int state ) {m_nLightState = state;};

Author

Commented:
I will agree to increase points.

Commented:
I understand , why you BC compiler generating errors. You need to put class declarations into HEADER file ( noname.h) , when create noname.cpp and include noname.h into it :
#include "noname.h"

void main ()
{
CLight lt(CLight::S_RED);
lt.SetState(CLight:S_AMBER);
}


It's perfectly legal to put class declarations in a .cpp file!
There is a lot of tinkering going on here!
You put them into a header file only if you want other modules (.cpp files) to share the class declaration.

First some remarks on the class CLight:
1. Since you use
   enum STATE { S_GREEN, S_AMBER, S_RED };
   you should not declare the light state-member as
   int m_LightState;
   but as:
   STATE m_LightState;
   to let the compiler help you finding possibly bugs, it will
   complain if you accidentally try to assign an int value to m_LightState

Here's how it should be: (You can put everything in one .cpp file, I did point out how to split it up in a .hpp (header) and
.cpp (module) file.

#include <cstring.h>
class Light
{
  public:
    enum State { Green, Amber, Red }; // the actual values don't matter!!
  private:
    State state; // The private variable to hold the State
  public:
    Light(State s) : state(s) {}
    void setState(State s)  { state = s; }
    State getState() const  { return state; }
    string asString() const;  // member function is only declared here
};

// member-function definition (actual code) in light.cpp file
string Light::asString() const
{
  switch(getState())
  {
    case Red    : return string("Red");
    case Amber  : return string("Amber");
    case Green  : return string("Green");
  }
  return string("Undefined State!");
}

// usage (main also in .cpp file, let say main.cpp)
#include <iostream.h>
#include <light.hpp> // not neccesary if you put everything in one file
int main()
{
  Light light(Light::Green);
  cout <<  light.asString() << endl;
  light.setState(Light::Red);
  cout << light.asString() << endl;
  return 0;
}

Use a project where you put your .cpp files.
Let me know if anything goes wrong.
.luc.

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.