2015-12-18 28 views
9

aşağıdaki hatayı alıyorum: Forhatası: 'std :: basic_string <char> :: yineleyici ...' dönüştürülemiyor için 'const char * argüman için '1' ...'

error: cannot convert 'std::basic_string<char>::iterator {aka __gnu_cxx::__normal 
_iterator<char*, std::basic_string<char> >}' to 'const char*' for argument '1' 
to 'int remove(const char*)' 

bir nedense, Mac'imde çalışırken programım mükemmel bir şekilde derler ... ama bir Linux makinesini kullandığımda, bu hata birden fazla yerde ortaya çıkar. (Bu durumda neden kimse açıklayabilir, bu harika olurdu!)

Burada hata açılır örneklerinden biridir:

SomeClass::SomeClass(string t, string art, Time dur) { 
    char chars[] = ","; 
    t.erase(std::remove(t.begin(), t.end(), chars[0]), t.end()); 
    art.erase(std::remove(art.begin(), art.end(), chars[0]), art.end()); 
    // Some more code ... 
} 

Daha spesifik olarak, hata bu hattan geliyor:

t.erase(std::remove(t.begin(), t.end(), chars[0]), t.end()); 

Bu soruna nasıl yaklaşılacağını bilen var mı?

+0

[burada] çalışıyor (https://ideone.com/jZh5x5). Bir [mcve] üretebilir misin? – NathanOliver

+3

Doğru kaldırma işlevini kaldırmıyor, mu eklediniz? (Ne yazık ki içinde başka bir kaldırır) – Borgleader

+0

Derleyici hatasını doğru şekilde okuyun. Soru başlığındaki önemli kısmı kaçırdınız. Size açıkça aramak istediğiniz işlev olmayan int remove (const char *) 'aramaya çalıştığını söyler. –

cevap

15

#include <algorithm>, nerede std::remove bulunduğu için unuttum. Bu olmadan, derleyiciniz sadece <cstdio> başlığındaki dolaylı olarak tanımlanan this std::remove (Visual C++ 14 ile aynı hatayı alıyorum) hakkında bilgi sahibi olur.

Derleyiciler arasında farklı davranış, standart kitaplık uygulamalarının farklı #include hiyerarşilerinin bir sonucudur.

İlgili konular