我正在尝试用我的代码建立两个不同类之间的关系。我有一个类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的新手,所以我不确定我在这里做错了什么。任何人都可以解释我的错误吗?非常感谢提前。
答案 0 :(得分:0)
代码中的发件人和接收者只是类型,而不是字段。你应该声明两个字段,例如:发件人发件人;接收者接收器
答案 1 :(得分:0)
Senders
和Receivers
在typedef
课程中Object
,而不是成员。
对象(或变量)和类型通常在同一范围内具有相同的名称
答案 2 :(得分:0)
你有:
typedef std::vector<std::unique_ptr<Interface>> Senders;
typedef std::vector<std::unique_ptr<Interface>> Receivers;
确实, Senders
和Receivers
是类型。它们不是对象。因此,
this->Senders
和this->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));