c++ - c++ 上的前向声明,里面有一个列表

标签 c++

我有两个类(class) 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_;但是当我尝试调用列表函数时总是有链接问题。我的问题是如何必须在包含来自另一个类的对象的类中包含一个列表。

最佳答案

该标准要求,除非明确说明,否则您必须将完整类型与库模板一起使用。这基本上会阻碍您的设计(其中每个对象都按值维护另一种类型的列表)。

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

关于c++ - c++ 上的前向声明,里面有一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15883302/

相关文章:

c++ - 更改名称文件放置我的文件 C++ & Qt 的第一行

javascript - 如何访问 nodejs 插件中的包装对象属性

c++ - 在 QCustomPlot 中,如何实时为相同数据绘制折线图和条形图?

c++ 在同一行打印

android - 使用静态 gnutls 库的共享库具有文本重定位

c++ - 使用 const 初始化列表初始化 const vector

c++ - 通过 ctor 右值参数的 Lambda 赋值

c# - 用户定义的类的对象/类数组失败

c++ - 如何使用 chrono 确定运行时间

c++ - 为什么按值返回的未命名对象在调用其转换运算符之前会被破坏?