ฉันมีคลาส foo
(ซึ่งฉันไม่สามารถแก้ไขได้) มีคอนสตรัคเตอร์เพียงตัวเดียวที่รับอาร์กิวเมนต์เดียวดังนี้:
foo bar("Hello!");
เนื่องจาก Constructor สามารถส่งข้อผิดพลาดได้ ฉันจึงต้องการใช้การจัดการข้อผิดพลาด ความพยายามครั้งแรกของฉันคือ:
try {
foo bar("Hello!");
}
catch {
cerr << "Something went horribly wrong...";
return -1;
}
อย่างไรก็ตาม ขณะนี้ foo
อยู่ภายในขอบเขตของบล็อก try
และไม่สามารถใช้ที่อื่นได้ ถ้าฉันเข้าใจสิ่งที่ถูกต้อง ฉันไม่สามารถประกาศวัตถุโดยไม่เตรียมใช้งาน ดังนั้นฉันสามารถประกาศ bar
นอกบล็อก try
ได้ แล้วฉันจะทำอย่างไรเพื่อตรวจจับข้อผิดพลาดที่ Constructor ส่งมา?
แก้ไข: เพื่อชี้แจงให้ชัดเจน นี่คือใน main
ของฉัน และใน catch
ฉันจะยกเลิกโปรแกรม นอกจากนี้ อาร์กิวเมนต์ยังเป็นไฟล์ที่จะเปิด ดังนั้นจึงไม่มีอินพุตที่ปลอดภัยที่รู้จักซึ่งจะไม่ทำให้เกิดข้อยกเว้น
main()
ใช่ไหม? แล้วทำไมไม่เก็บมันไว้ในฟังก์ชันอื่นที่คุณใส่ไว้ในบล็อคลองล่ะ? - person juanchopanza   schedule 10.09.2015bar
และไม่สามารถสร้างได้ แสดงว่าคุณมีปัญหาเล็กน้อย - person MSalters   schedule 10.09.2015