Solved

c++ class & emun

Posted on 1997-07-24
6
391 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
0
Comment
Question by:ljmiller
  • 3
  • 2
6 Comments
 
LVL 3

Expert Comment

by:jaba
ID: 1165899
// 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

0
 

Author Comment

by:ljmiller
ID: 1165900
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

0
 
LVL 3

Expert Comment

by:jaba
ID: 1165901
check CLight (intt state ) {m_nLightState = state;};
to
CLight (int state ) {m_nLightState = state;};
0
Best Practices: Disaster Recovery Testing

Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.

 

Author Comment

by:ljmiller
ID: 1165902
I will agree to increase points.
0
 
LVL 3

Expert Comment

by:jaba
ID: 1165903
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);
}


0
 
LVL 3

Accepted Solution

by:
LucHoltkamp earned 50 total points
ID: 1165904
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.
0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In days of old, returning something by value from a function in C++ was necessarily avoided because it would, invariably, involve one or even two copies of the object being created and potentially costly calls to a copy-constructor and destructor. A…
Many modern programming languages support the concept of a property -- a class member that combines characteristics of both a data member and a method.  These are sometimes called "smart fields" because you can add logic that is applied automaticall…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

821 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question