ฉันใช้ g++ ใน CodeBlocks IDE ใน Ubuntu ฉันยังใหม่กับ STL และบางส่วนของ C++
คำถามที่ 1: //ตอบแล้ว
std::istream_iterator< std::string > begin ( dictionaryFile );
std::istream_iterator< std::string > end;
std::vector< std::string> dictionary;
std::copy ( begin, end, std::back_inserter ( dictionary ) );
ถูกต้องแต่พอผมเปลี่ยน
std::istream_iterator< std::string > end;
เข้าไปข้างใน
std::istream_iterator< std::string > end();
คอมไพเลอร์บอกว่าไม่มีการเรียกใช้ฟังก์ชันที่ตรงกันที่บรรทัดที่สี่
คำถามที่ 2: //ขออภัย ฉันไม่ได้ทำให้ปัญหาชัดเจนในครั้งแรก
struct PS : std::pair< std::string, std::string > {
PS();
static struct FirstLess: std::binary_function< PS, PS, bool> {
bool operator() ( const PS & p, const PS & q ) const {
return p.first < q.first;
}
} firstLess1; };
struct FirstLess: std::binary_function< PS, PS, bool> {
bool operator() ( const PS & p, const PS & q ) const {
return p.first < q.first;
}} firstLess2;
โปรดทราบว่าข้อแตกต่างเพียงอย่างเดียวระหว่าง firstLess1 และ firstLess2 คือ firstLess1 ได้รับการประกาศใน PS
เมื่อฉันเรียกใช้ฟังก์ชัน:
k = std::find_if ( j + 1, finis, std::not1 ( std::bind1st ( PS::firstLess1, *j ) ) );
คอมไพเลอร์แจ้งข้อผิดพลาด 'การอ้างอิงที่ไม่ได้กำหนดไปยัง PS::firstLess1' ให้ฉัน แล้วฉันก็เปลี่ยนเป็น
k = std::find_if ( j + 1, finis, std::not1 ( std::bind1st ( firstLess2, *j ) ) );
แล้วมันก็ผ่านการคอมไพล์
ที่แปลกกว่านั้นคือในส่วนอื่นๆ ของโปรแกรม ฉันใช้ทั้งสองอย่าง
j = std::adjacent_find ( j , finis, PS::firstLess1 );
j = std::adjacent_find ( j , finis, firstLess2 );
และคอมไพเลอร์ไม่ได้แจ้งข้อผิดพลาดให้ฉัน