Q:

Possibly bad constructor, not sure why class is not being recognized

So for class we are to use a templated class Set which is derived from templated class List to perform set operations.  When I compile, the compiler complains that Set has not been declared in the current scope.  Obviously I have included both the .h file for Set and the .h file for List in the cpp.  I feel I have probably botched the constructor somehow but am clueless as to what is really wrong.  Any insight is greatly appreciated. 
Compiler complaints:
p07.cpp: In function ‘void SetMgr(std::istream&, std::istream&, std::istream&,       std::ostream&)’:
p07.cpp:43:2: error: ‘Set’ was not declared in this scope
p07.cpp:43:6: error: expected primary-expression before ‘int’
p07.cpp:43:6: error: expected ‘;’ before ‘int’
p07.cpp:44:2: error: ‘s1’ was not declared in this scope
p07.cpp:47:6: error: expected primary-expression before ‘int’
p07.cpp:47:6: error: expected ‘;’ before ‘int’
p07.cpp:48:2: error: ‘s2’ was not declared in this scope
p07.cpp:51:6: error: expected primary-expression before ‘int’
p07.cpp:51:6: error: expected ‘;’ before ‘int’
p07.cpp:52:2: error: ‘s3’ was not declared in this scope
p07.cpp:55:6: error: expected primary-expression before ‘int’
p07.cpp:55:6: error: expected ‘;’ before ‘int’
p07.cpp:56:2: error: ‘I’ was not declared in this scope
p07.cpp:60:6: error: expected primary-expression before ‘int’
p07.cpp:60:6: error: expected ‘;’ before ‘int’
p07.cpp:61:2: error: ‘U’ was not declared in this scope
p07.cpp:65:6: error: expected primary-expression before ‘int’
p07.cpp:65:6: error: expected ‘;’ before ‘int’
p07.cpp:66:2: error: ‘D’ was not declared in this scope

p07.cpp includes:
#include <cstdlib> 
#include <cstring> 
#include <iostream> 
#include <fstream> 
#include <string> 
#include <limits.h>

using namespace std; 

#include "List07.h"
#include "Set07.h"

The function the compiler is complaining about in p07.cpp:
void SetMgr(istream& i1, istream& i2, istream& i3, ostream& o) {

            //Next Line is line 43 where errors begin
            Set<int> s1(INT_MIN, i1);
    s1.Print(cout, "set 1");
    s1.Print(o, "set 1");

    Set<int> s2(INT_MIN, i2);
    s2.Print(cout, "set 2");
    s2.Print(o, "set 2");

    Set<int> s3(INT_MIN, i3);
    s3.Print(cout, "set 3");
    s3.Print(o, "set 3");

    Set<int> I(INT_MIN);
    I.Intersection(s1, s2);
    I.Print(cout, "set I");
    I.Print(o, "set I");

    Set<int> U(INT_MIN);
    U.Union(s2, s3);
    U.Print(cout, "set U");
    U.Print(o, "set U");

    Set<int> D(INT_MIN);
    D.Difference(U, I);
    D.Print(cout, "set D");
    D.Print(o, "set D");

}

List07.h class declaration and constructors:
    template 
    class List{
        int size;
        int count;
        int cursor;
        T* L;
public:
    void Empty(void){int sz=size; if(L)delete[] L; New(sz);}

    List(T m, int sz=100):size(sz), count(0), cursor(0), MIN(m) {L=new T[size];L[0]=MIN;}

    List(T m, istream&i, int sz=100):size(sz), count(0), cursor(0), MIN(m)
    {
        L=new T[size]; L[0]=MIN; Scan(i);
    }

};

Set07.h include of List07.h, class declaration and constructors:
#ifndef List07_h
#define List07_h 1
#include <cstdlib> 
#include <cstring> 
#include <iostream> 
#include <fstream> 
#include <string> 
#include <limits.h>

#include "List07.h"

template <class T>
class Set <T> public: List<T> {

public:
    Set(T m):List<T>(m, sz){}
    Set(T m, istream& i, ):List<T>(m, i){}
    ~Set(){~List();}

};
#endif

A:

You should change (file Set07.h):
#ifndef List07_h
#define List07_h 1

to something like:
#ifndef Set07_h
#define Set07_h

good luck!