【问题标题】:How to access data member in a list, with different type than my list如何访问列表中的数据成员,其类型与我的列表不同
【发布时间】:2015-07-18 14:06:42
【问题描述】:

我正在编写一个带有 Artikel 类型列表的程序,列表中有几个元素,每个元素包含 4 个数据成员,2 个 int 和 2 个 string。该列表按 int artikelNr 排序,下面的函数应该在考虑其 artikelNr 的正确位置向列表中添加一个新的 Artikel。虽然由于列表是 Artikel 类型并且我要比较的数据成员是 Int 我得到了错误:'->' 的基本操作数具有非指针类型'Artikel'|

我已经尝试将迭代器 *it 添加到 int 类型的列表中,但它不起作用,因为列表是 Artikel 类型。

void Lager::lagg_till_registret(Artikel funkArtikel)  
{
bool check = false;
list<Artikel>::iterator it = listaMedArtiklar.begin();
while(check == false){
   if(funkArtikel.artikelNr < (*it)->artikelNr){
        listaMedArtiklar.insert (it,funkArtikel);
        check = true;
    }
    else
        it++;
}
}

【问题讨论】:

  • 试试it-&gt;artikelNr。 (*it 不是指针。)
  • @molbdnilo 如果Artikel 是一个指针怎么办!?
  • @DieterLücking "'->' 的基本操作数具有非指针类型 'Artikel'" 有点暗示它不是。
  • @molbdnilo 我试过了->artikelNr 并且我不再有关于类型的错误,但是,我得到了其中两个:错误:无效使用成员函数(你忘记了'( )' ?)|
  • @EmilCoder 如果artikelNr是一个函数,你需要"()",但是你没有写任何。

标签: c++ iterator


【解决方案1】:

最好的解决方法是:

void Lager::lagg_till_registret(Artikel funkArtikel)  
{
bool check = false;
list<Artikel>::iterator it = listaMedArtiklar.begin();
while(check == false){
    if(funkArtikel.artikelNr < it->artikelNr){
        listaMedArtiklar.insert (it,funkArtikel);
        check = true;
    }
    else
        it++;
   }
}

你也可以这样做(这个和第一个一样,但是看起来很难看)

if(funkArtikel.artikelNR < (*it).artikelNr)

【讨论】:

  • 我试过了,它删除了以前关于不同类型的错误,但现在我收到另一个错误:错误:无效使用成员函数(你忘记了'()'吗?)知道什么那是什么意思?感谢您抽出宝贵时间!
  • @EmilCoder 需要更多代码来检查这一点。如果artikelNr 是一个函数,请加上括号。如果不是,则错误属于代码的另一部分。
  • @EmilCoder 我建议您使用合适的 IDE(如 Eclipse)来编写代码。这使得调试代码更容易。一个好的方法会表明您在写作时缺少括号。
  • 好的,如果没问题,我可以通过驱动器发送所有文件。 artikelNr 是一个 int 变量。 drive.google.com/…
  • 好的,到目前为止我只使用过代码块和 Microsoft Visual c++ Studio,但一定会尝试一下!
【解决方案2】:

我记不太清了,但是如果您在 c++ 中取消引用变量,则不需要“->”运算符。尝试使用“。”而是:

void Lager::lagg_till_registret(Artikel funkArtikel)  
{
bool check = false;
list<Artikel>::iterator it = listaMedArtiklar.begin();
while(check == false){
   if(funkArtikel.artikelNr < (*it).artikelNr){
        listaMedArtiklar.insert (it,funkArtikel);
        check = true;
    }
    else
        it++;
}
}

【讨论】:

  • 我试过'.'起初,但它不起作用,我收到错误:'std::list::iterator' has no member named 'artikelNr'|
  • 它是 'std::list::iterator' 但 (*it) 是 Artikel
  • 是的,迭代器属于 Artikel 类型,而我尝试访问的数据成员属于 int 类型。抱歉,我真的不明白?
  • 迭代器是指向一些Artikel类型数据的指针,在c++中可以通过两种方式访问​​引用的数据。 it-&gt;member(*it).member。当你写'it.member'时你会得到一个错误,它是一个指针而不是一个类/结构。希望对你有帮助
  • 正如我在其他答案中看到的那样:要访问函数,您必须在函数名称 funkArtikel.artikelNr() &lt; it-&gt;artikelNr() 后使用 '()',funkArtikel.artikelNr() &lt; (*it).artikelNr() 可能会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
  • 2017-02-19
  • 2012-08-07
  • 1970-01-01
  • 2015-12-25
相关资源
最近更新 更多