有谁知道为什么以下在VC9上产生错误?
class Elem;
class ElemVec : public vector<Elem>
{
public:
void foo();
};
void ElemVec::foo()
{
BOOST_FOREACH(Elem& elem, *this)
{
// Do something with elem
}
return;
}
我得到的错误是:
error C2355: 'this' : can only be referenced inside non-static member functions
我现在唯一能够无误编译的(黑客)解决方案是:
void ElemVec::foo()
{
ElemVec* This = this;
BOOST_FOREACH(Elem& elem, *This)
{
// Do something with elem
}
return;
}
答案 0 :(得分:4)
您不应该继承STL容器。这些不是多态类,而是BOOST_FORACH
无法处理派生类的原因。
尝试使用聚合。
答案 1 :(得分:1)
您使用的是哪个编译器/ Boost版本?我可以编译以下没有任何问题(VS2005 / Boost 1.38):
#include <boost/foreach.hpp>
using namespace std;
struct xxx : std::vector<int>
{
void test()
{
BOOST_FOREACH(int x, *this)
{
}
}
};
int main(void) {
xxx x;
x.test();
return 0;
}
如果您想了解更多详情,请搜索Boost bugbase。
答案 2 :(得分:0)
我从未见过那个错误。我猜它来自BOOST_FOREACH宏的实现。
我可以问你为什么要根据vector&lt; ...&gt;创建一个类吗?并且没有矢量成员变量?
修改强> 在this thread之后,我发现这实际上是一个视觉工作室错误。您找到的解决方案似乎是最简单的。
答案 3 :(得分:0)
嗯,所有在我的msvc(2005)编译器上编译成功。
也许你有一些错误,但在创建你的例子时修复或避免它。