trouble with errors in extraneous files

lapetitedingue's Avatar, Join Date: Feb 2009
Light Poster
Hi,
I am trying to implement a non_recursive version (bottom-up) of mergeSort. When I compile my code, however, my x-code brings up numerous errors that have to do with some files that I did not think I was messing with (stl_algo.h, and stl_algobase.h, and stl_iterator_base_types.h) -I will attach a picture of the list of errors.
This is my code for the non_recursive mergeSort
Code: c++
#include <iostream>
#include <vector>
using namespace std;

#ifndef MERGESORT_H
#define MERGESORT_H

    /**
     * Mergesort algorithm (driver).
     */

    template <typename Comparable>
    void mergeSort( vector<Comparable> & a )
    {
        int n = a.size()-1;
        vector<Comparable> aux;
        for (int m = 1; m < n; m = m+m)
        {
            for (int i = 0; i< n-m; i += m+m)
            {
                /* the last perameter of merge is the min of i+m+m or n*/
                int d = i+m+m;
                if (d < n) { merge(a, aux, i, i+m, d); }
                else { merge(a, aux, i, i+m, n); }
            }
        }
               
    };

    /**
     * Internal method that makes NON_RECURSIVE mergeSort
     */

    template <typename Comparable>
    void mergeSort( vector<Comparable> & a, vector<Comparable> aux, int l, int m, int r)
    {
       
        for (int i = l; i<m; i++)
        {   
            aux.at(i) = a.at(i);
            for (int j=m; j<r; j++)
            {
                aux.at(j) = a.at(m+r-j-1);
                int i = 1; j = r-1;
                for (int k =1; k<r; k++)
                {
                    if (aux.at(j) < aux.at(i)) { a.at(k) =aux.at(j-1); }
                    else { a.at(k) = aux.at(i+1); }
                }
            }

        }
    };
    #endif /*mergeSort.h*/
Here is my main where I am testing it:
Code: c++
#include <iostream>
#include <vector>
#include "mergeSort.h"
using namespace std;


int main ()
{
    vector<int>test;
    test.push_back(6);
    test.push_back(4);
    test.push_back(2);
    test.push_back(3);
    test.push_back(1);
    test.push_back(5);
    test.push_back(8);

    cout << "***Non-recursive MergeSort Algorithm***" <<'\n' <<'\n';
   
    //Initial Unsorted List
    cout << "Initial Unsorted List: "<<'\n';
    for ( int i = 0; i < 7; i++ )
        cout << test[i] << " ";
   
    //Calling MergeSort
    mergeSort(test);
    cout <<"Calling MergeSort" <<'\n';
   
    //Sorted List
    cout << "Sorted List: "<<endl;
    for ( int i = 0; i < 7; i++ )
        cout << test[i] << " ";
       
    return 0;
}

Does anyone see what the problem is here? Thanks a bunch in advance!
0
lapetitedingue's Avatar, Join Date: Feb 2009
Light Poster
I tried putting the #includes in the h file underneath the #define...but no luck. The first two errors are :
Line Location stl_algo.h:2991: error: no match for 'operator*' in '*__first1'
Line Location stl_algo.h:2991: error: no match for 'operator*' in '*__first1'
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
It's difficult to spot errors when you don't knw where to look.
Which line of your source code are the above errors associated with?
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
Also if you say what compiler you're using and on what operating system then maybe those of use that have that setup available can try the code out.