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; }