误将vector函数当作成员函数?C++课程作业报错求助
嘿,我太懂这种卡一整天、对着错误摸不着头脑的感觉了!先别慌,结合你提到的模板、抽象类、虚函数这些知识点,再看你贴的代码片段(虽然没写完),我先给你列几个这类场景下最容易踩的坑,你可以对照着排查:
1. 模板类虚函数的实现坑
- 模板抽象基类里的纯虚函数,派生类必须严格匹配模板参数来实现。比如基类声明了
virtual void display() = 0;,派生类就得写成template<class T> void CConcreteCell<T>::display(),参数、返回值半毛钱都不能差,不然编译器会认为你没实现纯虚函数,还是把类当成抽象类不让实例化。 - 模板类的成员函数(包括虚函数)的实现要么全放在头文件里,要么在cpp文件里显式实例化(比如
template class CAbstractCell<int>;),不然链接阶段会报undefined reference的错误——这是模板类最容易踩的链接坑!
2. 抽象类的析构函数必须是虚的!
你现在的CAbstractCell类没写析构函数,这绝对是个隐患!抽象类作为基类时,析构函数必须声明为虚析构,不然当你用基类指针指向派生类对象,delete的时候只会调用基类的析构函数,派生类的资源根本释放不了,轻则内存泄漏,重则直接崩。赶紧补上:
virtual ~CAbstractCell() = default;
或者如果需要自定义析构逻辑,写个带实现的虚析构也行。
3. 继承模板基类时别漏了模板参数
派生类继承模板基类的时候,一定要明确指定模板参数,比如:
template<class CellType> class CConcreteCell : public CAbstractCell<CellType> { // ... 派生类实现 };
要是漏了<CellType>,编译器会把CAbstractCell当成非模板类,直接给你报一堆“找不到基类”的错误,新手很容易犯这个错。
你的代码片段格式化后(补了点提示)
#include <iostream> #include <string> #include <vector> using namespace std; template<class CellType> class CAbstractCell { protected: int m_iRow; int m_iColumn; CellType m_oCellType; public: CAbstractCell() { m_iRow = 0; m_iColumn = 0; } // 必须加虚析构! virtual ~CAbstractCell() = default; // 抽象类至少要有一个纯虚函数,比如: virtual void showCellInfo() = 0; };
如果这些排查都没解决你的问题,把完整的错误信息和剩下的代码贴出来,我再帮你精准定位!
内容的提问来源于stack exchange,提问作者Jfc lol
相关产品推荐
相关产品推荐

