使用引用包括对象内的对象向量

时间:2015-08-19 04:41:00

标签: c++

我正在尝试用我的代码建立两个不同类之间的关系。我有一个类Object和一个类接口。 Object类可以包含任意数量的接口,我选择将这些接口存储在唯一指针的向量中。

我的对象类定义是:

#ifndef BASE_OBJECT
#define BASE_OBJECT

#include <vector>
#include <memory>

#include "./Interface.hxx"

class Object
{
/*****************
    Properties
******************/
//General
std::string ObjectType;

//Interfaces - All objects have at least one sender or receiver
//(otherwise it does nothing)
//Senders
typedef std::vector<std::unique_ptr<Interface>> Senders;

//Receivers
typedef std::vector<std::unique_ptr<Interface>> Receivers;

/**********************
    Member functions
**********************/
public:
    //Standard constructor
    Object(void);

    //Copy constructor
    Object(const Object& from);

    //Virtual destructor
    virtual ~Object(void);

    //Add an interface
    void add_interface(std::string type);
};

#endif

我还没有包含我的界面类,因为它还没有定义任何内容。当我尝试向我的Object添加一个接口时,我从我的main函数调用以下例程:

//Add interface to object
MyObject->add_interface("Sender");

调用例程add_interface:

//Add an interface to the object
void Object::add_interface(std::string type)
{
if (type.compare("Sender")){
    auto intf = std::unique_ptr<Interface>(new Interface);
    this->Senders.push_back(std::move(intf));
}
else if (type.compare("Receiver")){
    auto intf = std::unique_ptr<Interface>(new Interface);
    this->Receivers.push_back(std::move(intf));
}
else{
    //Throw exception
}
}

目前在视觉工作室快递中,发送者&#34;和&#34;接收者&#34;突出显示警告&#34;错误:不允许输入类型名称&#34;,编译时出现以下错误:

&#39;功能式演员&#39;:非法作为 - &gt;的右侧操作

我是智能指针和OOP的新手,所以我不确定我在这里做错了什么。任何人都可以解释我的错误吗?非常感谢提前。

3 个答案:

答案 0 :(得分:0)

代码中的发件人和接收者只是类型,而不是字段。你应该声明两个字段,例如:发件人发件人;接收者接收器

答案 1 :(得分:0)

SendersReceiverstypedef课程中Object,而不是成员。

对象(或变量)和类型通常在同一范围内具有相同的名称

答案 2 :(得分:0)

你有:

typedef std::vector<std::unique_ptr<Interface>> Senders;
typedef std::vector<std::unique_ptr<Interface>> Receivers;
确实,

SendersReceivers是类型。它们不是对象。因此, this->Sendersthis->Receivers没有意义。

您需要使用:

Senders senders;     // A variable that can hold senders
Receivers receivers; // A variable that can hold receivers.

然后使用:

this->senders.push_back(std::move(intf));

this->receivers.push_back(std::move(intf));