这在C++中是否可行?toString(ClassName*class)

jca*_*los 0 c++ visual-c++

我想在类参数中使用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)

Ale*_*x F 5

// Animal.h
// #include "Treatment.h"   remove this

class Treatmemt;    // forward declaration

class Animal
{
    ...
};

在您的版本中,Treatment.h和Animal.h相互包含.您需要使用前向声明来解决此循环依赖关系.在.cpp文件中,包含所有必需的h文件.