如何解决“删除”关键字存在问题
| 在main
功能中
string reader_txt = \"Readers.txt\";
string book_txt = \"Books.txt\";
Reader * obj[10];
// *********** Reading Reader.txt
ifstream reader_input;
reader_input.open(reader_txt.c_str()); // open file
string reader_name;
string reader_category;
int reader_n_category;
int counter=0;
if(reader_input.is_open())
{
while( getline(reader_input,reader_name,\'\\n\') && getline(reader_input,reader_category,\'\\n\'))
{
reader_n_category = atoi(reader_category.c_str());
switch(reader_n_category)
{
case FANTASY:
obj[counter++] = new fantasyReader(reader_name);
break;
case MYSTERY:
obj[counter++] = new mysteryReader(reader_name);
break;
case HORROR:
obj[counter++] = new horrorReader(reader_name);
break;
case SCIENCE:
obj[counter++] = new scienceReader(reader_name);
break;
}
}
}
else
cout<<\"Cannot open up the Readers.txt\"<<endl;
reader_input.close(); // close file
2ѭ是基础课
fantasyReader
,horrorReader
,mysteryReader
,scienceReader
是派生类。
在main
的末尾,我输入:
for(int pos=0; pos < counter; pos++)
{
delete obj[pos]; // compiling error,I don\'t know why
}
我收到一个编译错误:
main.obj:错误LNK2019:函数\"public: void * __thiscall Reader::\'scalar deleting destructor\'(unsigned int)\" (??_GReader@@QAEPAXI@Z)
中引用的未解析外部符号\"public: __thiscall Reader::~Reader(void)\" (??1Reader@@QAE@XZ)
这行不通。我该如何或应该在哪里写delete
声明?
解决方法
这不是编译时错误,而是链接错误。您已声明
Reader
的析构函数,但未实现。您必须在virtual12ѭ中实现析构函数,即使它是纯虚拟的,也是如此:
class Reader {
public:
virtual ~Reader() = 0;
};
Reader::~Reader() {}
还要记住(如果您还没有这样做的话),基类必须始终将其析构函数设置为virtual
。
, 那是一个链接错误,而不是编译器错误。
您忘了为ѭ12的析构函数定义实现。
, Reader
基类需要有一个公共虚拟析构函数。可能还有其他问题,但这是我可以从不完整的代码中收集到的。
, 重要的不是删除语句。您是否将派生类定义为虚拟类?或者,至少您已将析构函数声明为虚拟的?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。