2015-11-23 103 views
-2

在下面的代码中,当我在ClassWithList中使用构造函数时,是否需要创建我的列表的实例?C++指针列表和通过引用

另外,为什么addToList错了?我怎样才能做到这一点?

class AbstClass; 
class ObjClass : AbstClass; 

class ClassWithList 
{ 
    std::list<AbstClass*> absts; 
public: 
    ClassWithList(); //new list? 
    void addToList(ObjClass& obj) 
    { 
     list.push_back(obj); 
    } 



}; 
+0

你需要修改你的问题,是关于你正在尝试什么来实现的,什么是目前发生的事情,以及你更清晰到目前为止已经尝试过。 –

+4

因为您的列表被称为“absts”而不是“列表”。 – Steve

+1

而且您不需要在构造函数中显式创建列表。 – Steve

回答

0

你必须做一些简单的修正(注释中说明):

class AbstClass; 
class ObjClass : public AbstClass; // << You need to derive as public 

class ClassWithList 
{ 
    std::list<const AbstClass *> absts; 
public: 
    ClassWithList(); // You don't need new list, it will be allocated 
        // already correctly at construction 
    void addToList(const AbstClass& obj) 
    { 
     absts.insert(&obj); // << pass the address 
    // ^^^^^ The member is named absts 
    } 
}; 
0

你宣称包含指向对象

std::list<AbstClass*> absts; 
      ^^^^^^^^^^ 

一个列表中,这样的功能addToList应该接受指针类型的对象AbstClass *

void addToList(AbstClass *obj) 
{ 
    absts.push_back(obj); 
    ^^^^^ 
} 

至于列表,然后它的默认构造函数将在创建类的对象时被隐式调用。所以你不得不在类的构造函数中不做任何事情。

+0

@SergeyA你是什么意思? –

+2

@Vlad只要'&obj'被推入'absts',我们就可以完全确定'void addToList(ObjClass&obj)' –

+0

我认为OP的列表成员是因此添加方法应该调用absts.push_back(obj); – Chaz