【发布时间】:2014-11-06 16:19:03
【问题描述】:
我有以下问题:
我想实现以下类结构:
-
IParser.h中的父级#ifndef IPARSER_H #define IPARSER_H #include "json.h" class IParser { public: template <typename T> json::Object Parse(const T&, json::Object); }; #endif // IPARSER_H -
HTMLParser.h中的孩子#ifndef HTMLPARSER_H #define HTMLPARSER_H #include <iostream> #include "IParser.h" class HTMLParser : public IParser { public: HTMLParser(); ~HTMLParser(); json::Object Parse(std::string const&, json::Object&); }; #endif -
HTMLParser.cpp中的孩子#include "HTMLParser.h" HTMLParser::HTMLParser() { std::cout << "constructed" << std::endl; } HTMLParser::~HTMLParser() { std::cout << "destructed" << std::endl; } json::Object HTMLParser::Parse(std::string const& data, json::Object& object) { // do something return json::Object(); }
但是当我想构建它时,它会抛出这个错误:
error LNK2019: unresolved external symbol "public: class json::Object __thiscall
IParser::Parse<class std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > >(class std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > const &,class json::Object)" (??$Parse@V?$basic_string@DU?
$char_traits@D@std@@V?$allocator@D@2@@std@@@IParser@@QAE?AVObject@json@@ABV?$basic_string@DU?
$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@Z) referenced in function _main
知道有什么问题吗? 基本上我想创建带有模板函数的接口类,子类将指定和实现。
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
模板方法不能是虚拟的。
-
所以我不能定义一个具有不同第一个参数的方法,哪些孩子将使用特定类型实现?
标签: c++ templates inheritance interface