C++:错误:“”标记之前的预期类名

Posted

技术标签:

【中文标题】C++:错误:“”标记之前的预期类名【英文标题】:C++: error: expected class-name before ‘’ tokenC++:错误:“”标记之前的预期类名 【发布时间】:2018-09-23 04:24:21 【问题描述】:

我有一个 ADT class Set,它继承了其父模板 class SetInterface.I also haveclass Songandclass PlayList, which essentially inherits thecorresponding class Set 公共成员的方法。我收到以下错误:

In file included from Song.cpp:7:0: Set.h:12:33: error: expected class-name before ‘’ token class Set : public SetInterface .

我看到了类似问题的线程并尝试了以下建议:

    检查以确保我的包含警卫拼写正确 将我的文件包含在 .cpp 中,而不是 .hpp 文件中 包括类而不是使用#include "className.h" 使用循环包含

但是,我仍然收到相同的错误,或者它再次出现在不同的文件中。所以,我决定创建自己的帖子。这是每个文件的代码:

    SetInterface.h

    #ifndef SET_INTERFACE_H_
    
    #define SET_INTERFACE_H_
    
    #include <vector>
    
    template<class ItemType>
    
    class SetInterface
    
    
    
     public:
    ...
    ; // end SetfInterface
    
    #endif /* SET_INTERFACE_H_ */
    

    设置.h

    #ifndef SET_H_
    
    #define SET_H_
    
    template <class ItemType>
    class Set : public SetInterface 
    
    private:
    
     static const int DEFAULT_SET_SIZE = 4; // for testing purposes we will keep the set small
    
     ItemType items_[DEFAULT_SET_SIZE]; // array of set items    
     int item_count_;                  // current count of set items
    
     int max_items_;                   // max capacity of the set
    
     int getIndexOf(const ItemType& target) const;
    
    ;
    
    #endif
    

    设置.cpp

    #include "Set.h"
    #include "Song.h"
    
     template<class ItemType>
     class Set : SetInterface 
     public:
     ...
    ;
    

    歌曲.h

    #include <string>
    
    class Song 
    
    public:
    ...
    ;
    

    歌曲.cpp

    #include "Set.h"
    #include "Song.h"
    #include <string>
    #include <iostream>
    //Default constructor for Song which initializes values
    Song::Song() 
      std::string title_;
      std::string author_;
      std::string album_;
     
    ...
    
    

    播放列表.h

    class PlayList : public Set 
    public: 
    
      PlayList();
    
      PlayList(const Song& a_song);
      int getNumberOfSongs() const;
    
      bool isEmpty() const;
    
      bool addSong(const Song& new_song);
    
      bool removeSong(const Song& a_song);
    
      void clearPlayList();
    
      void displayPlayList() const;
    
     private: 
    
        Set<Song> playlist_;
    
    

    播放列表.cpp

    #include "Set.h"
    #include "Song.h"
    #include "PlayList.h"
    #include <iostream>
    
    template<class ItemType>
    class PlayList : public Set 
    public:
    ...
    
    

    如何纠正这个错误?

【问题讨论】:

【参考方案1】:

由于SetInterface是模板类,继承时需要指定模板参数:

#ifndef SET_H_

#define SET_H_

template <class ItemType>
class Set : public SetInterface<ItemType> 

private:

 static const int DEFAULT_SET_SIZE = 4; // for testing purposes we will keep the set small

 ItemType items_[DEFAULT_SET_SIZE]; // array of set items    
 int item_count_;                  // current count of set items

 int max_items_;                   // max capacity of the set

 int getIndexOf(const ItemType& target) const;

;

#endif

【讨论】:

以上是关于C++:错误:“”标记之前的预期类名的主要内容,如果未能解决你的问题,请参考以下文章

“”之前的预期类名

C++ 在 标记之前期望类名,继承错误

'令牌类继承之前的c ++预期类名[重复]

C ++错误:“类名”之前的预期类型说明符[重复]

令牌SDL错误之前的预期类名[关闭]

src/walletdb.h:96:1:错误:“”令牌之前的预期类名