delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/06/20/09:05:03

From: drathj01 AT xlab1 DOT fiu DOT edu (daniel k rathjens)
Newsgroups: comp.os.msdos.djgpp
Subject: error in method '__as'
Date: 16 Jun 1997 07:23:25 GMT
Organization: Florida International University
Lines: 128
Message-ID: <5o2pld$793@isis.fiu.edu>
NNTP-Posting-Host: xlab1.fiu.edu
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

I am writing a linked list implementation of a queue class that uses
iterators and I am getting the following error when I compile:
In function 'int main()':
myq.h(44) Error: inconsistent return types for method '__as' in class
'Queue<int>'

Line 44 is the end of my class declaration.  Is '__as' some kind of
assembler optimization the compiler is making? 

(I compiled a version that just used pointers for front and back and it
worked fine)

Here is myq.h and after that myq.cc:
// ******************PUBLIC OPERATIONS*********************
// void Enqueue( Etype X )--> Insert X
// void Dequeue( )        --> Remove least recently inserted item
// Etype Front( )         --> Return least recently inserted item
// int IsEmpty( )         --> Return 1 if empty; else return 0
// int IsFull( )          --> Return 1 if full; else return 0
// void MakeEmpty( )      --> Remove all items
// ******************ERRORS********************************
// Predefined exception is propogated if new fails
// EXCEPTION is called for Front or Dequeue on empty queue

#ifndef __Queue
#define __Queue

#include <stdlib.h>
#include "List.h"

template <class Etype>
class Queue
{
  public:
    Queue( ) : _Front( _Line ), _Back( _Line ) { }
    ~Queue( );

    Queue & operator=( const Queue & Rhs );

    void Enqueue( const Etype & X );
    void Dequeue( );
    const Etype & Front( ) const;
    int IsEmpty( ) const      { return +_Front; }
    int IsFull( ) const       { return 0; }
    void MakeEmpty( );
  private:
    List<Etype> _Line;
    ListItr<Etype> _Front;
    ListItr<Etype> _Back;
};
#endif

and here is myq.cc:
#include "myq.h"
#include "Exception.h"
template <class Etype>
Queue<Etype>::~Queue( ) { MakeEmpty( ); }


template <class Etype>
const Queue<Etype> &
Queue<Etype>::operator=( const Queue<Etype> & Rhs )
{
    if( this == &Rhs )
        return Rhs;

    MakeEmpty( );
    if( Rhs.IsEmpty( ) )
        return *this;

    ListItr RhsItr = Rhs;
    for ( RhsItr.First(); +RhsItr(); ++RhsItr() )
       {
           Enqueue( RhsItr() );
       }
    return *this;
}

template <class Etype>
void
Queue<Etype>::Enqueue( const Etype & X )
{
    if( IsEmpty( ) )
        {
             _Back.Insert( X ); // inserts first item into queue and
             _Front.First();    // makes front point at first item
        }
    else
        _Back.Insert( X );      // otherwise just insert item at the back
}

template <class Etype>
void
Queue<Etype>::Dequeue( )
{
    EXCEPTION( IsEmpty( ), "Queue is empty" );
    _Front.Zeroth();   // moving _Front to header so I can use RemoveNext
                       // to dequeue the first item
    _Front.RemoveNext();
    if ( !IsEmpty() )
       _Front.First(); // moving _Front to the first item so Front
                       // will return the right value
    else
       _Back.Zeroth(); // since I just removed last item, _Back has
                       // to point at the header now
}

template <class Etype>
const Etype &
Queue<Etype>::Front( ) const
{
    EXCEPTION( IsEmpty( ), "Queue is empty" );
    return &_Front();
}

template <class Etype>
void
Queue<Etype>::MakeEmpty( )
{
    while( !IsEmpty( ) )
        Dequeue( );
}

--
#include <disclaimer.h>    #include <humorous_quote.h>
void main(geek *code) {    // pointer points to: Danny Rathjens
GCS/M/S d+(-) s+:- a-- C+++>$ ULSC++>+++$ P+? L++ E W++(+) N+++ o K w++ 
!O !M- V- PS PE+ Y-- PGP- t++@ !5 X+ R+ tv b+++ DI+ D+ G++ e+ h r y? }

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019