1

我有两个课程PetPerson

这是Person.h:

#ifndef PERSON_H
#define PERSON_H
#include <list>

class Pet;

class Person
{
public:
    Person();
    Person(const char* name);
    Person(const Person& orig);
    virtual ~Person();

    bool adopt(Pet& newPet);
    void feedPets();

private:
    char* name_;
    std::list<Pet> pets_;
};

#endif  

这是 Pet.h

#ifndef PET_H
#define PET_H
#include <list>
#include "Animal.h"

class Person;

class Pet : public Animal
{
public:
    Pet();
    Pet(const Pet& orig);
    virtual ~Pet();
    std::list<Pet> multiply(Pet& pet);

private:
    std::string name_;
    Person* owner_;
};

#endif

我遇到的问题是:

/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/list.tcc:129: error: invalid use of undefined type `struct Pet'

Person.h:13: error: forward declaration of `struct Pet'

我修复了这个问题std::list<Pet>* pets_;,但是当我尝试调用列表函数时总是有链接问题。我的问题是如何必须在包含来自另一个类的对象的类中包含一个列表。

4

1 回答 1

4

该标准要求,除非明确说明,否则您在库模板中使用完整类型。这基本上会抑制您的设计(每个对象按值维护另一个类型的列表)。

您可以通过使用 [smart] 指针(指向容器的指针或指针容器)来解决此问题。

于 2013-04-08T15:42:23.967 回答