我想在类参数中使用toString,但由于某种原因存在错误.代码是:
Animal.h
#include "Treatment.h"
#include "jdate.h"
#include <vector>
class Animal{
protected:
int id;
double weight;
int yy;
int mm;
int dd;
double accDose;
char sex;
vector<Treatment*> treatArray;
public:
Animal();
Animal(int newid, double newweight, int yy, int mm, int dd, char newsex, vector<Treatment*> treatArray);
~Animal();
};
Run Code Online (Sandbox Code Playgroud)
Treatment.h
#ifndef TRE_H
#define TRE_H
#include <string>
#include <sstream>
#include "jdate.h"
#include "Animal.h"
#include "Cattle.h"
#include "Sheep.h"
class Treatment{
private:
int id;
jdate dayTreated;
double dose;
public:
Treatment(int id,jdate dayTreated, double dose);
Treatment();
~Treatment();
string toString(Animal* a);
};
#endif
Run Code Online (Sandbox Code Playgroud)
Treatment.cpp
#include "Treatment.h"
using namespace std;
Treatment::Treatment(int newid,jdate newdayTreated, double newdose){
id=newid;
dayTreated = newdayTreated;
dose = newdose;
}
Treatment::Treatment(){
id=0;
dose=0;
}
Treatment::~Treatment(){}
string Treatment::toString(Animal* a)
{
string aa;
return aa;
}
Run Code Online (Sandbox Code Playgroud)
toString在Treatment类中.我不确定,但我认为这是因为Animal有矢量treatArray;.它真的重要吗?很抱歉,我无法在此处输入错误消息,因为一旦我声明toString,由于某种原因会发生大量错误,例如
Error 1 error C2065: 'Treatment' : undeclared identifier l:\2011-08\c++\assignment\drug management\drug management\animal.h 30 1 Drug Management
Run Code Online (Sandbox Code Playgroud)
// Animal.h
// #include "Treatment.h" remove this
class Treatmemt; // forward declaration
class Animal
{
...
};
在您的版本中,Treatment.h和Animal.h相互包含.您需要使用前向声明来解决此循环依赖关系.在.cpp文件中,包含所有必需的h文件.