我想在类参数中使用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();
};
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
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;
}
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
答案 0 :(得分:5)
// Animal.h // #include "Treatment.h" remove this class Treatmemt; // forward declaration class Animal { ... };
在您的版本中,Treatment.h和Animal.h互相包含。您需要使用前向声明来解决此循环依赖关系。在.cpp文件中,包含所有必需的h文件。
答案 1 :(得分:2)
在定义类Treatment
之前,您在Treatment.h中包含了Animal.h,这就是您收到错误的原因。
使用前向声明解决此问题:
在Animal.h中添加行
class Treatment;
答案 2 :(得分:0)
您没有在两个头文件中使用std
命名空间。
因此,请使用std::string
代替string
。因为string
在std
命名空间中定义。
Simillarly使用std::vector
代替vector
。
答案 3 :(得分:0)
您的代码存在一些问题。首先,Animal.h
应该有一个包含警示Treatment.h
:
#ifndef ANIMAL_H
#define ANIMAL_H
// Your code here
#endif
我还建议你给Treatment.h
后卫一个更长的名字,你可以降低在其他地方使用相同名字的风险。
使用警卫将确保您没有循环包含。你仍然有一个循环依赖,因为Treatment
类需要知道Animal
类,反之亦然。但是,在两种情况下,您都使用指向另一个类的指针,不需要完整定义,您可以 - 实际上 - 应该在两个头文件中替换另一个包含简单声明的内容。例如,在Animal.h
删除
#include "Treatment.h"
并添加
class Treatment;
Treatment.cpp
和Animal.cpp
都必须同时包含Treatment.h
和Animal.h
。