【问题标题】:void value not ignored as it ought to be. Setting reference to pointer member by method from iteratorvoid 值没有被忽略,因为它应该被忽略。通过迭代器的方法设置对指针成员的引用
【发布时间】:2015-01-02 22:58:42
【问题描述】:

如果我从 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);
    }
}

编译器给我以下错误: 应该忽略的无效值

【问题讨论】:

  • 试试it-&gt;SetCFoo(&amp;cfoo);
  • 怎么不工作?如果编译器给你一个错误信息,你需要编辑你的帖子并包含它。如果是运行时错误,我们也需要知道。
  • 好的。错误包含在主题中。
  • 我非常怀疑编译器发出了错误“void value not ignored as it hould be”。 ;p
  • 谢谢 πάντα ῥεῖ,它有效。

标签: c++ pointers reference iterator


【解决方案1】:
*it->SetCFoo(&cfoo);

相同
*(it->SetCFoo(&cfoo));

你需要的是:

(*it).SetCFoo(&cfoo);

或者只是

it->SetCFoo(&cfoo);

语句开头的* 不仅不需要,而且会导致编译器错误,因为您不能将一元* 运算符应用于CCFoo::SetCFoo() 的返回值,它是@ 类型987654328@.

【讨论】:

  • 也许(*it).SetCFoo(&amp;cfoo); ?
  • 呃。只需声明:it-&gt;SetCFoo(...)* 是完全无关的。没必要(*尴尬)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 2021-02-08
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
相关资源
最近更新 更多