我正在Visual C ++ 2010中编写一个小程序。当有问题的类被分成*.h
时,我遇到了一些麻烦实现从一些抽象类继承的纯虚函数和*.cpp
个文件。
这是Sir.h文件,我在其中声明了我的类和方法,Sir是一个基类:
class Sir{
protected : Uint _count;
TVint _elemente;
public : Sir();
virtual ~Sir(){}
Uint operator[] (int index);
Sir& operator() (int index);
friend ostream& operator << (ostream &out, const Sir &sir);
protected : virtual void CalculateValues(int index)=0;
}
class Fibonacci:public Sir{
enum { MAX_FIB = 47 };
using Sir::CalculateValues;
void CalculateValues(int index);
}
这是Sir.cpp:
#include "Sir.h"
Sir::Sir(){_count=0;}
Uint Sir::operator[](int index)
{
if(index<0)
ParameterOutOfBounds();
else{_count=index+1;}
return _elemente[_count];
}
Sir& Sir::operator()(int index){operator[] (index);}
void Fibonacci::CalculateValues(int index){
if(index<Fibonacci::MAX_FIB)
{Fibonacci::_elemente.push_back(1);
Fibonacci::_elemente.push_back(1);
while(_elemente.size()<_count)
Fibonacci::_elemente.push_back(_elemente[_elemente.size()-1]+_elemente[_elemente.size()-2]);
}
else ParameterOutOfBounds();
}
ostream& operator << (ostream &out, const Sir &sir)
{
cout<<"Index Value"<<endl;
cout<<"--------------------"<<endl;
for(int i=0;i<_count;i++)
cout<<i<<" "<<_elemente[_count]<<endl;
}
这是testSir.cpp文件:
#include "Sir.h";
#include<iostream>;
#include"Calc\Exceptions.h";
using namespace std;
int main(){
Sir * fib=new Fibonacci;
fib->CalculateValues(1); //Error : function is inaccessible
system("PAUSE");
return 0;
}
我收到错误:错误:函数“Sir :: CalculateValues”无法访问。我该如何解决这个问题?
受保护是我的坏事。现在我在Sir * fib=new Fibonacci;
遇到了另一个问题
我得到“错误:抽象类类型的对象”Fibonacci“不允许”。
答案 0 :(得分:1)
该方法无法访问,因为它声明为protected
。
protected : virtual void CalculateValues(int index)=0;
将其添加到public :
:
public : Sir();
virtual ~Sir(){}
Uint operator[] (int index);
Sir& operator() (int index);
friend ostream& operator << (ostream &out, const Sir &sir);
virtual void CalculateValues(int index)=0;
同样适用于Fibonacci
类(仅限相关方法)
protected
方法只能由声明它或其任何衍生物的类
答案 1 :(得分:0)
CalculateValues
被声明为受保护,因此只能从子类{of Sir
类访问它。
如果您希望它可以从任何其他类调用,则声明 public 。