CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Page 2 of 2 FirstFirst 12
Results 16 to 18 of 18
  1. #16
    VictorN's Avatar
    VictorN is online now Super Moderator Power Poster
    Join Date
    Jan 2003
    Location
    Hanover Germany
    Posts
    20,396

    Re: Conflicting declaration of objects. Need Solution Please

    Well, I have to tell you again (and it is the last time!):
    Please, post properly formatted code with indentations and within Code tags!

    And not just a couple of lines but your actual code (or code snippet) that we will be able to compile and test.
    Note that the code you have posted in the post#12 has nothing to do with the one in your OP!
    Victor Nijegorodov

  2. #17
    Join Date
    Jan 2013
    Posts
    13

    Re: Conflicting declaration of objects. Need Solution Please

    Code after edit
    Code:
     
    #include <iostream>
    #include <typeinfo>
    
    using namespace std;
    
    /*the Command interface*/
    class Command 
    {
    public:
              template <typename t>
              virtual void execute(t obj)=0;
    
              template <typename T>
              friend bool operator ==( T left, T right );
    };
    
    template <typename T>
    bool operator==( T left, T right ){
              return (left == right);
                                                }
    
    /*Receiver class*/
    class Light {
    
    public:
                   Light() { }
    
                   void turnOn() {
                     
                       cout << "The light is on" << endl;
                                      }
    
    
                  void turnOff() {
                     cout << "The light is off" << endl;
                                     }
    };
    
    class Fan {
    
    public:
                   Fan() { }
    
                  void turnOn() {
    
                     cout << "The Fan is on" << endl;
                                     }
    
                 void turnOff() {
    
                    cout << "The Fan is off" << endl;
                                    }
    };
    
    /*the Command for turning on the light*/
    
    class FlipUpCommand: public Command {
    
    public:
                  template <typename t>
                  FlipUpCommand(t myobject) {
                           if (myobject == theLight){
                           theLight=myobject;
                           execute(theLight);
                                                           }
                        if (myobject = theFan){
                        theFan = myobject; 
                        execute(theLight);
                                                    } 
    
    }
    
                   template <typename t>
                   virtual void execute(t obj){
                   obj.turnOn();
                                                      }
    
    public:
               Light theLight;
               Fan   theFan;
    };
    
    
    class FlipDownCommand: public Command {
    
    public:
                      template <typename t>
                      FlipUpCommand(t myobject){
                          if (myobject == theLight){
                           theLight=myobject;
                           execute(theLight);
                                                     }
                        if (myobject = theFan){
                          theFan = myobject; 
                          execute(theLight);
                                                       } 
    
                                         }
    
             template <typename t>
             virtual void execute(t obj) {
                   obj.turnOff();
                                                }
    
    public:
          Light theLight;
          Fan   theFan;
    };
    
    
    
    class Switch {
    public:
    Switch(Command& flipUpCmd, Command& flipDownCmd):flipUpCommand(flipUpCmd),flipDownCommand(flipDownCmd)
    {
    
    }
    
    void flipUp()
    {
    flipUpCommand.execute();
    }
    
    void flipDown()
    {
    flipDownCommand.execute();
    }
    
    public:
    Command& flipUpCommand;
    Command& flipDownCommand;
    };
    
    
    /*The test class or client*/
    
    int main() 
    {
    
    
    void *myobj = NULL;
    Light *myLight;
    Fan *myFan;
    
    int choice;
    cout<<"Select Light (1): ";
    cout<<"Select Fan (2): ";
    cin>>choice;
    
       if (choice ==1) {
    
            Light *myLight = new Light();
            myobj = (void*)myLight;
                          }
        if (choice ==2){
          Fan *myFan = new Fan();
          myobj = (void*)myFan;
                            }
    
    FlipUpCommand switchUp(*myobj);
    FlipUpCommand switchUp(*myobj);
    FlipDownCommand switchDown(*myobj);
    Switch s(switchUp, switchDown);
    
    cout<<" ON (1), OFF(2) :";
    cin>>choice; 
        if(choice ==1){
           s.flipUp();
                           }
        if(choice==2){
          s.flipDown();
                         }
    
    
    getch();
    }

  3. #18
    VictorN's Avatar
    VictorN is online now Super Moderator Power Poster
    Join Date
    Jan 2003
    Location
    Hanover Germany
    Posts
    20,396

    Re: Conflicting declaration of objects. Need Solution Please

    Well, I put your code into file temp.cpp and tried to compile it in VS2010:
    Code:
      temp.cpp
    d:\2010 projects\temp\temp\temp.cpp(11): error C2898: 'void Command::execute(t)' : member function templates cannot be virtual
    d:\2010 projects\temp\temp\temp.cpp(74): error C2898: 'void FlipUpCommand::execute(t)' : member function templates cannot be virtual
    d:\2010 projects\temp\temp\temp.cpp(88): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    d:\2010 projects\temp\temp\temp.cpp(101): error C2898: 'void FlipDownCommand::execute(t)' : member function templates cannot be virtual
    d:\2010 projects\temp\temp\temp.cpp(121): error C2780: 'void Command::execute(t)' : expects 1 arguments - 0 provided
              d:\2010 projects\temp\temp\temp.cpp(11) : see declaration of 'Command::execute'
    d:\2010 projects\temp\temp\temp.cpp(126): error C2780: 'void Command::execute(t)' : expects 1 arguments - 0 provided
              d:\2010 projects\temp\temp\temp.cpp(11) : see declaration of 'Command::execute'
    d:\2010 projects\temp\temp\temp.cpp(160): error C2100: illegal indirection
    d:\2010 projects\temp\temp\temp.cpp(161): error C2100: illegal indirection
    d:\2010 projects\temp\temp\temp.cpp(161): error C2374: 'switchUp' : redefinition; multiple initialization
              d:\2010 projects\temp\temp\temp.cpp(160) : see declaration of 'switchUp'
    d:\2010 projects\temp\temp\temp.cpp(162): error C2100: illegal indirection
    d:\2010 projects\temp\temp\temp.cpp(162): error C2664: 'FlipDownCommand::FlipDownCommand(const FlipDownCommand &)' : cannot convert parameter 1 from 'void *' to 'const FlipDownCommand &'
              Reason: cannot convert from 'void *' to 'const FlipDownCommand'
              No constructor could take the source type, or constructor overload resolution was ambiguous
    d:\2010 projects\temp\temp\temp.cpp(175): error C3861: 'getch': identifier not found
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    So, please, fix these errors, then we could talk about your further design.
    Victor Nijegorodov

Page 2 of 2 FirstFirst 12

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured