【发布时间】:2013-12-28 15:26:36
【问题描述】:
我正在尝试创建一组对象。仅仅定义集合是错误的。我现在没有带有 boost 的编译器。所以我使用了一个在线IDE。这是代码http://codepad.org/UsBAMmuh的链接。不知何故,它似乎不起作用。最后,我想在另一个类的构造函数中传递对这个集合的引用。
#include <iostream>
#include <boost/optional.hpp>
#include <boost/ref.hpp>
#include <boost/serialization/vector.hpp>
using namespace std;
class Fruit {
};
class Env
{
public:
Env(std::set<Fruit>& apples);
std::set<Fruit>& GetApples() const;
void AddApple(Fruit const& fruit);
private:
std::set<Fruit>& _apples;
};
Env::Env(std::set<Fruit>& apples):
_apples(apples)
{
}
std::set<Fruit>& Env::GetApples() const
{
return _apples;
}
void Env::AddApple(Fruit const& fruit)
{
this->_apples.insert(fruit);
}
class EnvHolder{
public:
void SetEnv (Env const& env);
Env& GetEnv()const;
private:
boost::scoped_ptr<Env> _env;
};
void EnvHolder::SetEnv(Env const& env)
{
this->_env.reset(new Env(env));
}
Env& EnvHolder::GetEnv() const
{
return *this->_env;
}
int main() {
std::set<Fruit> fruits;
//Fruit *fr = new Fruit();
//fruits.insert(*fr);
//Env env(fruits);
cout << "Hello" << endl;
return 0;
}
我收到以下错误:
/usr/local/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_function.h:在成员函数'bool std::less<_tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = Fruit]'中: /usr/local/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/boost_concept_check.h:358:实例化来自'void __gnu_cxx::_BinaryFunctionConcept<_func _return _first>Second>::_constraints() [with _Func = std::less, _Return = bool, _First = Fruit, _Second = Fruit]' /usr/local/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_set.h:112:实例化来自 '__gnu_norm::set, std::allocator >' /usr/local/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../include/c++/4.1.2/debug/set.h:45:实例化来自 '__gnu_debug_def::set, std::allocator >' t.cpp:35:从这里实例化 第 226 行:错误:'__x
【问题讨论】:
-
大部分代码是不相关的。问题是
Fruit不满足实例化std::set<Fruit>的要求。有很多关于这个的问题。 -
我没有对你投反对票,我认为它在这里也不是很合适,但如果你想避免其他 SO 用户的蔑视,请尝试将你的代码缩小到仍然产生错误的最小部分。在这种情况下,它将是类 Fruit { }; std::set