void 值没有被忽略,因为它应该被忽略。通过迭代器的方法设置对指针成员的引用
void value not ignored as it ought to be. Setting reference to pointer member by method from iterator
如果我从 ccfoo 调用 SetCFoo
它有效,但从迭代器(在循环中)它不起作用。
class CFoo{};
class CCFoo
{
public:
CFoo *m_cf;
void SetCFoo(CFoo *cf)
{
m_cf = cf;
}
};
int main()
{
CCFoo ccfoo;
CFoo cfoo;
//ccfoo.SetCFoo(&cfoo); <-- It works
vector<CCFoo> v1;
v1.assign(5,*new CCFoo); // I don't care about leak because it is example
for(vector<CCFoo>::iterator it = v1.begin(); it != v1.end(); it++ )
{
*it->SetCFoo(&cfoo);
}
}
编译器给我以下错误:
void 值没有被忽略,因为它应该被忽略
*it->SetCFoo(&cfoo);
与
相同
*(it->SetCFoo(&cfoo));
您需要的是:
(*it).SetCFoo(&cfoo);
或者只是
it->SetCFoo(&cfoo);
语句开头的 *
不仅不需要,而且会导致编译器错误,因为您不能对 [=16 的返回值应用一元 *
运算符=],类型为void
.
如果我从 ccfoo 调用 SetCFoo
它有效,但从迭代器(在循环中)它不起作用。
class CFoo{};
class CCFoo
{
public:
CFoo *m_cf;
void SetCFoo(CFoo *cf)
{
m_cf = cf;
}
};
int main()
{
CCFoo ccfoo;
CFoo cfoo;
//ccfoo.SetCFoo(&cfoo); <-- It works
vector<CCFoo> v1;
v1.assign(5,*new CCFoo); // I don't care about leak because it is example
for(vector<CCFoo>::iterator it = v1.begin(); it != v1.end(); it++ )
{
*it->SetCFoo(&cfoo);
}
}
编译器给我以下错误: void 值没有被忽略,因为它应该被忽略
*it->SetCFoo(&cfoo);
与
相同*(it->SetCFoo(&cfoo));
您需要的是:
(*it).SetCFoo(&cfoo);
或者只是
it->SetCFoo(&cfoo);
语句开头的 *
不仅不需要,而且会导致编译器错误,因为您不能对 [=16 的返回值应用一元 *
运算符=],类型为void
.