C++:错误:“”标记之前的预期类名
Posted
技术标签:
【中文标题】C++:错误:“”标记之前的预期类名【英文标题】:C++: error: expected class-name before ‘’ tokenC++:错误:“”标记之前的预期类名 【发布时间】:2018-09-23 04:24:21 【问题描述】:我有一个 ADT class Set
,它继承了其父模板 class SetInterface
.I also have
class Songand
class PlayList, which essentially inherits the
corresponding 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++:错误:“”标记之前的预期类名的主要内容,如果未能解决你的问题,请参考以下文章