【发布时间】:2015-06-02 21:02:33
【问题描述】:
请多多包涵,这是我第一次发帖。我有3节课。 Class Suppliers 有一组Class Parent。 Class Parent 有一个 Class location 向量,Class location 有数据成员。例如(这是伪代码,不是我的实际代码。为了简单起见,我只是展示了这个):
Class Suppliers{
set<Parent> setter;
};
Class Parent{
vector<location> loc;
};
`
以下是我创建的位置类的构造函数。我没有遇到任何问题,直到我用迭代器击中这两行。我正在尝试找到一个特定的父级并将一个新位置推回到父级“loc”向量上。所以我传入了我之前找到的迭代器作为参考。但是,一旦我尝试推回我的位置类的新实例,我就会收到以下错误。
data.cpp:139:33: 错误:将 'const std::vector' 作为 'void std::vector<_tp _alloc>::push_back(const value_type&) 的 'this' 参数传递 [with _Tp = location ; _Alloc = std::allocator; std::vector<_tp _alloc>::value_type = location]' 丢弃限定符 [-fpermissive]
最后一行还给出了一个错误,说我无法更改只读对象。我很困惑为什么这将是一个只读对象。我做了一些研究,并认为我需要添加一个复制构造函数。然而,这带来的问题多于解决的问题。有什么想法吗?
location::location(set<Parent>::iterator &it, vector<string> v){
sup_id = v[0];
address1 = v[2];
address2 = v[3];
city = v[4];
state = v[5];
country = v[6];
zip = v[7];
((*it).loc).push_back(*this);
((*it).num)++;
}
【问题讨论】:
-
除了@Daniel Frey 的回答之外,您的代码设计真的很差,因为您不应该在在自己的构造过程中传递实例的指针。
-
@Alexandre Severino,当我初始化对象并创建一个指向该对象的指针并将其推回(在构造函数之外)时,您会建议吗?
-
您是否考虑过使用工厂模式?您可以创建一个
static方法,该方法为其自己的类调用private constructor,并在正确实例化后添加到列表中。都在这个静态方法中。更多信息:codeproject.com/Articles/363338/Factory-Pattern-in-Cplusplus