代码之家  ›  专栏  ›  技术社区  ›  stacknotflow

C++在{token之前需要类名,这是一个继承错误

  •  0
  • stacknotflow  · 技术社区  · 8 年前

    KSetBase。h基类,一个接口

    #ifndef HW6_GTUSETBASE_H
    #define HW6_GTUSETBASE_H
    
    class KSet;
    
    #include <cstddef>
    namespace TU {
        template<typename T>
        class KSetBase {
        public:
            virtual bool empty() const = 0;
    
            virtual size_t size() const = 0; //int is not okay since unsigned also could be in.
            //comparisons would be not working if that was case
            //detailed
            //https://stackoverflow.com/questions/1181079/stringsize-type-instead-of-int
    
            virtual size_t max_size() const = 0;
    
            virtual void insert(T first, T second) = 0; //cift dondurmesi gerekli
            virtual void erase(T deleter) = 0;
    
            virtual void clear() = 0;
    
            virtual T find(T deneme) = 0;
    
            virtual size_t count(T testle) = 0;
    
            virtual T begin() = 0;
    
            virtual T end() = 0;
    
        protected:
            ~GTUSetBase() {
                //do nothing
            }
    
        };
    }
    
    #endif //HW6_GTUSETBASE_H
    

    K设置。h(派生类)

    #include "KSetBase.h"
    #ifndef HW6_GTUSET_H
    #define HW6_GTUSET_H
    
    
    #include <memory>
    
    using namespace std;
    namespace TU {
    
        template<typename T>
        class KSet : public KSetBase {
        public:
            bool empty() const;
    
            size_t size() const;
    
            size_t max_size() const;
    
            void insert(T first);
    
            void erase(T deleter);
    
            void clear();
    
            T find(T deneme);
    
            size_t count(T testle);
    
            T begin();
    
            T end();
    
        protected:
            int hmany = 0;
            shared_ptr<T> set_harmony;
    
    
        };
    
    }
    
    #endif //HW6_GTUSET_H
    

    我不知道我的代码哪一部分是错的。我基本上继承了接口类,实现了KSet中的所有函数。cpp。理论上看起来没有什么问题,但它给出了2个错误。

    两者都是主要的。cpp和KSet。cpp公司

    class KSet : public KSetBase { 错误行是这样的。

    我检查了#ifndef和#defines,我想过使用转发声明,但我似乎无法解决这个问题。我真的被这个问题困住了。我搜索了整个网页,最后总是有一个很大的语法错误或是一些可见的东西,但我不能在我的。这是一段非常简短的代码。

    1 回复  |  直到 8 年前
        1
  •  1
  •   amc176    8 年前

    KSetBase 是模板类,如果从中继承,则必须指定模板参数:

    template<typename T>
        class KSet : public KSetBase<T>
    

    此外,基类析构函数中似乎有一个输入错误。