关于constructor的问题

1982xcc 2003-08-24 06:55:01
程序如下:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class num_sequence{
public:

virtual ~num_sequence(){};

virtual int elem(int pos)=0;
virtual const char* what_am_i() const = 0;
static int max_elems(){ return _max_elems;}
virtual ostream& print(ostream &os=cout) const=0;
// virtual int length() const = 0;
// virtual int beg_pos() const = 0;
protected:
virtual void gen_elems(int pos) const=0;
bool check_integrity(int pos,int size) const;
//const static int _max_elems=1024;// static const int _max_elems = 1024;
// for compilers not supporting const static
enum { _max_elems = 1024 };

};


bool num_sequence::check_integrity (int pos,int size)const
{
if(pos<=0||pos>=_max_elems)
{
cout<<"Can not use!"<<endl;
return false ;
}
if(pos>size)
gen_elems(pos);///////////////被虚函数调用
return true;
}
ostream& operator<<(ostream &os,const num_sequence &ns)
{
return ns.print(os);
} ////////////////////////基类定义完成

class Fibonacci: public num_sequence{
public:

Fibonacci(int len=1,int beg_pos=1):_length(len),_beg_pos(beg_pos){}
virtual int elem(int pos)const;
virtual const char* what_am_i() const { return "Fibonacci"; }
virtual ostream& print(ostream &os=cout)const;
int length() const {return _length;}
int beg_pos()const {return _beg_pos;}


protected:
virtual void gen_elems(int pos) const;
int _length;
int _beg_pos;
static vector<int> _elems;
};
int Fibonacci::elem(int pos)const
{
if(!check_integrity(pos,_elems.size()))
return 0;
if (pos>_elems.size())
Fibonacci::gen_elems(pos);
return _elems[pos-1];
}
void Fibonacci::gen_elems (int pos)const
{
if (_elems.empty())
{
_elems.push_back(1);
_elems.push_back(1);///////////////////////////////////为何重复
}
if(_elems.size()<=pos)
{
int i=_elems.size();
int i_2=_elems[i-2];
int i_1=_elems[i-1];
for(;i<=pos;i++)
{
int elem=i_2+i_1;
_elems.push_back(elem);
i_2=i_1;i_1=elem;
}
}
}


ostream& Fibonacci::print(ostream &os)const
{
int elem_pos=_beg_pos-1;
int end_pos=elem_pos+_length;

if(end_pos>_elems.size())
Fibonacci::gen_elems (end_pos);
while(elem_pos<end_pos)
os<<_elems[elem_pos++]<<' ';
return os;

}



int main()
{
Fibonacci fib1;
cout<<"fib: beginning at element 1 for 1 element:"<<fib1<<endl;
Fibonacci fib2(16);
cout<<"fib: beginning at element 1 for 6element:"<<fib2<<endl;
Fibonacci fib3(8,12);
cout<<"fib: beginning at element 1 for 6element:"<<fib3<<endl;
return 0;
}



最后编译出现:'Fibonacci' : cannot instantiate abstract class due to following members:
看了constructor,不明白问题出在哪?
...全文
39 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
oopig 2003-08-24
  • 打赏
  • 举报
回复
类声明中的static vector<int> _elems;只是声明,还需要在cpp中加上定义:
vector<int> num_sequence::_elems;
1982xcc 2003-08-24
  • 打赏
  • 举报
回复
第一个解决了,谢谢
第二个,已经定义static vector<int> _elems;
再加声明,不是重复定义了么
hpho 2003-08-24
  • 打赏
  • 举报
回复
1,num_sequence::elem(int)与Fibonacci:elem(int)const不一至.(去掉const)
2,Fibonacci::_elems是static成员变量需要声明.(加vector<int> Fibonacci::_elems;)
课程导语:    人工智能可谓是现阶段最火的行业,在资本和技术协同支持下正在进入高速发展期。当今全球市值前五大公司都指向同一发展目标:人工智能。近几年,人工智能逐渐从理论科学落地到现实中,与生活越来越息息相关,相关的各种职位炙手可热,而深度学习更是人工智能无法绕开的重要一环。 从AlphaGo打败李世石开始,深度学习技术越来越引起社会各界的广泛关注。不只学术界,甚至在工业界也取得了重大突破和广泛应用。其中应用最广的研究领域就是图像处理和自然语言处理。而要入门深度学习,CNN和RNN作为最常用的两种神经网络是必学的。网上关于深度学习的资料很多,但大多知识点分散、内容不系统,或者以理论为主、代码实操少,造成学员学习成本高。本门课程将从最基础的神经元出发,对深度学习的基础知识进行全面讲解,帮助大家迅速成为人工智能领域的入门者,是进阶人工智能深层领域的基石。 讲师简介:赵辛,人工智能算法科学家。2019年福布斯科技榜U30,深圳市海外高层次人才(孔雀人才)。澳大利亚新南威尔士大学全奖博士,SCI收录其发表过的10篇国际期刊学术文章。曾任深圳市微埃智能科技有限公司联合创始人。CSDN人工智能机器学习、深度学习方向满分级精英讲师。授课风格逻辑严谨、条理清晰、循序渐进、循循善诱,化枯燥为如沐春风,所教学生人数过万。 课程设计: 本课程分为5大模块,19小节,共计540时长(约9小时): 第一部分,课程介绍、目标与内容概览。主要学习人工智能深度学习应用场景;熟悉深度学习主流技术;掌握使用keras解决深度学习主要问题(神经网络、卷积神经网络、循环神经网络),以及深度学习主要内容:神经网络、卷积神经网络、循环神经网络;案例简介。 第二部分,深度学习之多层感知器(MLP)。主要学习多层感知器(MLP);MLP实现非线性分类;深度学习实战准备;Python调用keras实现MLP。 MLP技术点实战案例:第三部分,深度学习之卷积神经网络(CNN)。主要学习卷积神经网络 ; CNN模型分析;主流CNN模型; Python调用keras实现CNN; CNN技术点实战案例:第四部分,深度学习之循环神经网络(RNN)。主要学习循环神经网络;RNN模型分析;Python调用keras实现RNN。 RNN技术点实战案例: 第五部分,综合提升。主要进行迁移学习;混合模型;实战准备+综合实战,以及最后进行课程内容总结。 混合模型技术点实战案例

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧