ข้อผิดพลาดอาร์กิวเมนต์เริ่มต้น: ถือว่าสตริงเป็นบูล [ซ้ำกัน]

ฉันมีคลาสส่วนหัวเท่านั้นที่มีสองฟังก์ชัน

  //F1
  void add_argument(const std::string &name, const std::string &desc,
                    const bool required = false) {
    //...
  }

และ

  //F2
  void add_argument(const std::string &name, const std::string &long_name,
                    const std::string &desc, const bool required = false) {
    //...
  }

และในรหัสของฉันฉันโทร

//L1: should call F2
add_argument("-w", "--write",
             "Writes the calibrated values to the config.",
             false);

//L2: should also call F2
add_argument(
  "-i", "--interval",
  "The time interval in milliseconds that it should check in.");

พฤติกรรมที่ตั้งใจไว้คือทั้ง L1 และ L2 เรียกเมธอดเดียวกัน F2 อย่างไรก็ตาม เมื่อฉันคอมไพล์และรัน L1 จะเรียก F2 อย่างถูกต้อง แต่ L2 จะเรียก F1

สิ่งที่ฉันสงสัยคือเหตุใดจึงปรากฏว่าใน L2 กำลังแปลงสตริงสุดท้ายเป็นบูลีนและไม่ได้ใช้อาร์กิวเมนต์เริ่มต้น นี่เป็นส่วนหนึ่งของมาตรฐาน C++11 หรือไม่ มันเป็นข้อผิดพลาดของคอมไพเลอร์/ลิงก์เกอร์ หรือฉันทำผิดพลาดไปหรือเปล่า

สิ่งนี้กำลังถูกคอมไพล์และรันบน RaspberryPi

  Linux raspberrypi 4.14.71-v7+ Raspbian GNU/Linux 9 (stretch)
  g++ (Raspbian 6.3.0-18+rpi1+deb9u1) 6.3.0 20170516
  GNU ld (GNU Binutils for Raspbian) 2.28

การใช้คำสั่งที่คล้ายกันนี้ (จริงๆ แล้วฉันใช้ cmake กับคำสั่ง make นั้นยากที่จะคัดลอกอย่างแน่นอน)

  g++ -std=c++11 -Wall -I. main.cpp -o test

(ฉันไม่ได้รับคำเตือนจากคอมไพเลอร์)


person Jesse Laning    schedule 10.12.2018    source แหล่งที่มา
comment
ตัวอักษรสตริงคือตัวชี้ และกฎภาษาบอกว่าควรใช้การแปลงตัวชี้ไปบูลมากกว่าการแปลงที่ผู้ใช้กำหนด (เช่น const char[] ถึง std::string) ดูที่นี่ สำหรับคำอธิบายโดยละเอียด   -  person alter igel    schedule 10.12.2018
comment
คุณสามารถลองสร้าง std::string อย่างชัดเจนได้ เช่น โดยการส่ง std::string("The time interval in milliseconds that it should check in.") แต่ฉันไม่แน่ใจว่ามีวิธีแก้ไขปัญหาที่ง่ายกว่านี้หรือไม่ที่จะป้องกันไม่ให้หลุมพรางนี้เกิดขึ้นอย่างเงียบ ๆ ตั้งแต่แรก   -  person alter igel    schedule 10.12.2018
comment
ด้วยตัวอักษรสตริง C++17 สามารถใช้: "string"s ดู: en.cppreference.com/w/cpp/string/ basic_string/ตัวดำเนินการ%22%22s   -  person Evg    schedule 10.12.2018
comment
ขอบคุณสำหรับความช่วยเหลือ คำตอบที่ซ้ำกันแก้ไขได้   -  person Jesse Laning    schedule 10.12.2018