这段代码出了什么问题?
class School {
public:
template<typename T> size_t count() const;
private:
vector<Boy*> boys;
vector<Girl*> girls;
};
template<> size_t School::count<Boy>() const {
return boys.size();
}
我的编译说
error: specialization of ‘size_t School::count() [with T = Boy]’
after instantiation
你能帮忙吗?
PS。这就是我以后要用它的方法:
School s;
size_t c = s.count<Boy>();
答案 0 :(得分:6)
你错过了一个分号。
class School {
public:
template<typename T> size_t count() const;
private:
vector<Boy*> boys;
vector<Girl*> girls;
}; // <-- Missing semi-colon
template<> size_t School::count<Boy>() const {
return boys.size();
}
答案 1 :(得分:4)
在声明之前,您是否在count<Boy>
中意外致电了School
?重现错误的一种方法是
class Boy;
class Girl;
class School {
public:
template<typename T> size_t count() const;
size_t count_boys() const { return count<Boy>(); }
// ^--- instantiation
private:
std::vector<Boy*> boys;
std::vector<Girl*> girls;
};
template<> size_t School::count<Boy>() const { return boys.size(); }
// ^--- specialization
int main () { School g; return 0; }
在所有模板成员都专业化之后,您需要移动count_boys()
的定义。
答案 2 :(得分:0)
这个可编译的代码使用g ++编译并运行正常:
#include <vector>
using namespace std;
struct Boy {};
struct Girl {};
class School {
public:
template<typename T> size_t count() const;
private:
vector<Boy*> boys;
vector<Girl*> girls;
};
template<> size_t School::count<Boy>() const {
return boys.size();
}
int main() {
School s;
size_t c = s.count<Boy>();
}
将来,请更加努力发布可编辑的代码 - 换句话说,代码包含必要的头文件和支持类。