Solved

c++ class & emun

Posted on 1997-07-24
6
371 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
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

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

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

This article will show you some of the more useful Standard Template Library (STL) algorithms through the use of working examples.  You will learn about how these algorithms fit into the STL architecture, how they work with STL containers, and why t…
Container Orchestration platforms empower organizations to scale their apps at an exceptional rate. This is the reason numerous innovation-driven companies are moving apps to an appropriated datacenter wide platform that empowers them to scale at a …
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

744 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now