C++ 模板方法的专门化-what';我的代码怎么了?
这个代码怎么了C++ 模板方法的专门化-what';我的代码怎么了?,c++,C++,这个代码怎么了 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(); } 你能帮忙吗 另外
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();
}
你能帮忙吗
另外,这是我以后将如何使用它:
School s;
size_t c = s.count<Boy>();
学校;
大小_t c=s.计数();
您缺少一个分号
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();
}
班级学校{
公众:
模板大小\u t count()常量;
私人:
矢量男孩;
矢量女孩;
}; // 此可编译代码使用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>();
}
#包括
使用名称空间std;
结构男孩{};
结构女孩{};
班级学校{
公众:
模板大小\u t count()常量;
私人:
矢量男孩;
矢量女孩;
};
模板大小\u t School::count()常量{
返回男孩。大小();
}
int main(){
学校;
大小_t c=s.计数();
}
今后,请更加努力发布可编译的代码——换句话说,是包含必要的头文件和支持类的代码。您是否在声明前意外调用了学校的计数?重现错误的一种方法是
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; }
班童;
班级女生;
班级学校{
公众:
模板大小\u t count()常量;
size_t count_boys()常量{return count();}
//^---实例化
私人:
性病:病媒男孩;
性病:病媒女孩;
};
模板大小学校::count()常量{return boys.size();}
//^--专业化
int main(){School g;返回0;}
在所有模板成员都被专门化之后,您需要移动count\u boys()
的定义。为什么要在size\u t count()const
之前使用template
,在School::count
方法之前使用template
,第二,我专门用一种特定的类型来描述它,确切的错误信息是什么?似乎代码在VS2008中工作感谢您的更正,下次我会更准确。也谢谢你的帮助!
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; }