Je suis en train d'écrire un petit programme en Visual C++ 2010. Je vais avoir quelques problèmes mettre en œuvre des fonctions virtuelles pures héritées d'une certaine classe abstraite, lorsque les cours en question sont divisés en *.h
et *.cpp
fichiers .méthode virtuelle Redéfinition de la classe de base
Ce fichier est le Sir.h où je déclare mes classes et méthodes, Monsieur est une classe de base:
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);
}
C'est 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;
}
C'est le testSir. fichier 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;
}
Je reçois l'erreur: Erreur: la fonction "Sir :: CalculateValues" est inaccessible. Comment puis-je réparer cela ?
EDIT:
Le protégé était mon mauvais. Maintenant, j'ai un autre problème à Sir * fib=new Fibonacci;
Je reçois "Erreur: objet de type de classe abstraite" Fibonacci "n'est pas autorisé".
En ce qui concerne votre modification, je ne reçois pas cette erreur de votre code. Cependant, vous n'avez clairement pas publié le code que vous compilez, car il contient beaucoup d'erreurs de syntaxe. Il semble que soit vous n'avez pas correctement substitué 'CalculateValues' (que vous avez dans le code affiché), soit le code réel contient une autre fonction virtuelle pure que vous n'avez pas surchargée. –