คำถามติดแท็ก c++

C ++ เป็นภาษาโปรแกรมทั่วไป เดิมได้รับการออกแบบให้เป็นส่วนขยายของ C และมีไวยากรณ์ที่คล้ายกัน แต่ตอนนี้มันเป็นภาษาที่แตกต่างอย่างสิ้นเชิง ใช้แท็กนี้สำหรับคำถามเกี่ยวกับรหัส (จะ) คอมไพล์ด้วยคอมไพเลอร์ C ++ ใช้แท็กเฉพาะรุ่นสำหรับคำถามที่เกี่ยวข้องกับการแก้ไขมาตรฐานเฉพาะ [C ++ 11], [C ++ 14], [C ++ 17] หรือ [C ++ 20] เป็นต้น

6
การโทรกลับ C ++ โดยใช้สมาชิกคลาส
ฉันรู้ว่ามีการถามเรื่องนี้หลายครั้งและด้วยเหตุนี้จึงเป็นการยากที่จะขุดผ่านปมและหาตัวอย่างง่ายๆว่าอะไรได้ผล ฉันมีสิ่งนี้มันง่ายและใช้ได้กับMyClass... #include <iostream> using std::cout; using std::endl; class MyClass { public: MyClass(); static void Callback(MyClass* instance, int x); private: int private_x; }; class EventHandler { public: void addHandler(MyClass* owner) { cout << "Handler added..." << endl; //Let's pretend an event just occured owner->Callback(owner,1); } }; EventHandler* handler; MyClass::MyClass() { …

7
ตัวชี้ฟังก์ชันไปยังฟังก์ชันสมาชิก
ฉันต้องการตั้งค่าตัวชี้ฟังก์ชันเป็นสมาชิกของคลาสที่เป็นตัวชี้ไปยังฟังก์ชันอื่นในคลาสเดียวกัน เหตุผลที่ฉันทำมันซับซ้อน ในตัวอย่างนี้ฉันต้องการให้เอาต์พุตเป็น "1" class A { public: int f(); int (*x)(); } int A::f() { return 1; } int main() { A a; a.x = a.f; printf("%d\n",a.x()) } แต่สิ่งนี้ล้มเหลวในการรวบรวม ทำไม?

4
cc1plus: ข้อผิดพลาด: ไม่รู้จักตัวเลือกบรรทัดคำสั่ง“ -std = c ++ 11” พร้อม g ++
ฉันกำลังพยายามรวบรวมโดยใช้g++และแฟล็ก-std=c++11หรือc++0x อย่างไรก็ตามฉันได้รับข้อผิดพลาดนี้ cc1plus: error: unrecognized command line option "-std=c++11" g ++ - รุ่น g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR …

28
ตัวชี้การทดสอบความถูกต้อง (C / C ++)
มีวิธีใดในการตรวจสอบ (โดยทางโปรแกรมแน่นอน) ว่าตัวชี้ที่ระบุ "ถูกต้อง" การตรวจสอบค่า NULL นั้นง่าย แต่สิ่งที่เกี่ยวกับ 0x00001234? เมื่อพยายามหักล้างตัวชี้ชนิดนี้จะมีข้อยกเว้น / ข้อขัดข้องเกิดขึ้น แนะนำให้ใช้วิธีข้ามแพลตฟอร์ม แต่เฉพาะแพลตฟอร์ม (สำหรับ Windows และ Linux) ก็ใช้ได้เช่นกัน อัปเดตเพื่อการชี้แจง: ปัญหาไม่ได้อยู่ที่พอยน์เตอร์เก่า / เป็นอิสระ / ไม่ได้กำหนดค่าเริ่มต้น ฉันกำลังใช้ API ที่รับตัวชี้จากผู้โทรแทน (เช่นตัวชี้ไปยังสตริงตัวจัดการไฟล์ ฯลฯ ) ผู้โทรสามารถส่ง (ด้วยจุดประสงค์หรือโดยไม่ได้ตั้งใจ) ค่าที่ไม่ถูกต้องเป็นตัวชี้ ฉันจะป้องกันความผิดพลาดได้อย่างไร
92 c++  c  validation  pointers  null 

2
เหตุใดฟังก์ชันที่ถูกลบ C ++ 11 จึงมีส่วนร่วมในการแก้ปัญหาโอเวอร์โหลด
ทำไม C ++ 11 ทำให้" deleted" ฟังก์ชั่นมีส่วนร่วมในการแก้ปัญหาเกิน ? เหตุใดจึงมีประโยชน์ หรือกล่าวอีกนัยหนึ่งว่าเหตุใดจึงซ่อนไว้แทนที่จะถูกลบทั้งหมด
92 c++  c++11 

5
ทำไมโครงสร้างขนาด 3 แทนที่จะเป็น 2
ฉันได้กำหนดโครงสร้างนี้: typedef struct { char A:3; char B:3; char C:3; char D:3; char E:3; } col; sizeof(col)ให้ฉันเอาท์พุทของ 3 แต่ไม่ควรจะเป็น 2 หรือไม่? ถ้าฉันแสดงความคิดเห็นเพียงองค์ประกอบเดียวsizeofคือ 2 ฉันไม่เข้าใจว่าทำไม: ห้าองค์ประกอบของ 3 บิตเท่ากับ 15 บิตและน้อยกว่า 2 ไบต์ มี "ขนาดภายใน" ในการกำหนดโครงสร้างเช่นนี้หรือไม่? ฉันแค่ต้องการคำชี้แจงเพราะจากความคิดของฉันเกี่ยวกับภาษาจนถึงตอนนี้ฉันคาดว่าจะมีขนาด 2 ไบต์ไม่ใช่ 3
91 c++  c  struct 

3
เหตุใดค่า int ที่เป็นลบมากที่สุดจึงทำให้เกิดข้อผิดพลาดเกี่ยวกับการโอเวอร์โหลดของฟังก์ชันที่ไม่ชัดเจน
ฉันกำลังเรียนรู้เกี่ยวกับการทำงานมากเกินไปใน C ++ และเจอสิ่งนี้: void display(int a) { cout << "int" << endl; } void display(unsigned a) { cout << "unsigned" << endl; } int main() { int i = -2147483648; cout << i << endl; //will display -2147483648 display(-2147483648); } จากสิ่งที่ฉันเข้าใจค่าใด ๆ ที่กำหนดในintช่วง (ในกรณีของฉันintคือ 4 ไบต์) จะเรียกdisplay(int)และค่าใด ๆ ที่อยู่นอกช่วงนี้จะไม่ชัดเจน …

6
ส่วนหัวที่คอมไพล์ล่วงหน้าด้วย GCC
มีใครประสบความสำเร็จบ้างในการรับส่วนหัวที่คอมไพล์ไว้ล่วงหน้าที่ทำงานกับ GCC บ้าง? ฉันไม่มีโชคในความพยายามของฉันและฉันยังไม่เห็นตัวอย่างที่ดีมากมายสำหรับวิธีการตั้งค่า ฉันได้ลองใช้ cygwin gcc 3.4.4 และใช้ 4.0 บน Ubuntu

2
วงเล็บเสริมจะมีผลเมื่อใดนอกเหนือจากลำดับความสำคัญของตัวดำเนินการ
วงเล็บใน C ++ ถูกใช้ในหลาย ๆ ที่เช่นในการเรียกใช้ฟังก์ชันและการจัดกลุ่มนิพจน์เพื่อแทนที่ลำดับความสำคัญของตัวดำเนินการ นอกเหนือจากวงเล็บเสริมที่ผิดกฎหมาย (เช่นรอบรายการอาร์กิวเมนต์การเรียกใช้ฟังก์ชัน) ทั่วไป - แต่ไม่ใช่กฎสัมบูรณ์ของ C ++ คือวงเล็บพิเศษจะไม่ทำร้าย : 5.1 นิพจน์หลัก [expr.prim] 5.1.1 ทั่วไป [expr.prim.general] 6 นิพจน์ในวงเล็บคือนิพจน์หลักที่มีชนิดและค่าเหมือนกันกับนิพจน์ที่แนบมา การมีอยู่ของวงเล็บจะไม่ส่งผลต่อนิพจน์ว่าเป็น lvalue หรือไม่ นิพจน์วงเล็บสามารถใช้ในบริบทเดียวกับที่สามารถใช้นิพจน์ที่แนบมาได้ทุกประการและมีความหมายเหมือนกันยกเว้นที่ระบุไว้เป็นอย่างอื่น คำถาม : ในบริบทใดที่วงเล็บเสริมเปลี่ยนความหมายของโปรแกรม C ++ นอกเหนือจากการแทนที่ลำดับความสำคัญของตัวดำเนินการพื้นฐาน หมายเหตุ : ฉันพิจารณาข้อ จำกัด ของไวยากรณ์ตัวชี้ถึงสมาชิกที่&qualified-idไม่มีวงเล็บให้อยู่นอกขอบเขตเนื่องจากจำกัด ไวยากรณ์แทนที่จะอนุญาตให้สองไวยากรณ์ที่มีความหมายต่างกัน ในทำนองเดียวกันการใช้วงเล็บภายในนิยามมาโครของตัวประมวลผลล่วงหน้ายังป้องกันความสำคัญของตัวดำเนินการที่ไม่ต้องการ

9
ฉันจะเรียกใช้ฟังก์ชัน C ++ แบบพกพาที่ใช้ถ่าน ** บนบางแพลตฟอร์มและ const char ** บนแพลตฟอร์มอื่น ๆ ได้อย่างไร
บนเครื่อง Linux (และ OS X) ของฉันiconv()ฟังก์ชั่นมีต้นแบบนี้: size_t iconv (iconv_t, char **inbuf... ในขณะที่ FreeBSD จะมีลักษณะดังนี้: size_t iconv (iconv_t, const char **inbuf... ฉันต้องการให้โค้ด C ++ ของฉันสร้างบนทั้งสองแพลตฟอร์ม ด้วยคอมไพเลอร์ C การส่งผ่านchar**สำหรับconst char**พารามิเตอร์ (หรือในทางกลับกัน) มักจะส่งเสียงเตือนเท่านั้น อย่างไรก็ตามใน C ++ เป็นข้อผิดพลาดร้ายแรง ดังนั้นถ้าฉันผ่าน a char**มันจะไม่รวบรวมบน BSD และถ้าฉันส่งผ่านconst char**มันจะไม่คอมไพล์บน Linux / OS X ฉันจะเขียนโค้ดที่คอมไพล์ทั้งสองอย่างโดยไม่ต้องพยายามตรวจจับแพลตฟอร์มได้อย่างไร แนวคิด (ล้มเหลว) อย่างหนึ่งที่ฉันมีคือการจัดเตรียมต้นแบบท้องถิ่นที่แทนที่ส่วนหัวที่ให้มา: void myfunc(void) …
91 c++  const  portability 

12
การประกาศตัวแปรในไฟล์ส่วนหัว - คงที่หรือไม่?
เมื่อปรับโครงสร้างใหม่บางส่วน#definesฉันเจอการประกาศที่คล้ายกับสิ่งต่อไปนี้ในไฟล์ส่วนหัว C ++: static const unsigned int VAL = 42; const unsigned int ANOTHER_VAL = 37; คำถามคือสถิตจะสร้างความแตกต่างอะไรได้บ้าง? โปรดทราบว่าการรวมส่วนหัวหลายรายการไม่สามารถทำได้เนื่องจาก#ifndef HEADER #define HEADER #endifเคล็ดลับแบบคลาสสิก(หากมีความสำคัญ) สแตติกหมายถึงการVALสร้างสำเนาเพียงชุดเดียวในกรณีที่ส่วนหัวรวมอยู่ในไฟล์ต้นฉบับมากกว่าหนึ่งไฟล์หรือไม่
91 c++  c  static 

10
เปิดไลบรารี PDF สำหรับแอปพลิเคชัน C / C ++? [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน6 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันต้องการสร้างเอาต์พุต PDF จากแอปพลิเคชัน C ++ Windows (เนทีฟ) ของฉัน มีไลบรารีฟรี / โอเพ่นซอร์สให้ทำสิ่งนี้หรือไม่? ฉันดูคำตอบของคำถามนี้แต่ส่วนใหญ่เกี่ยวข้องกับ. Net
91 c++  c  pdf  open-source 

2
เหตุใด std :: stack จึงใช้ std :: deque ตามค่าเริ่มต้น
เนื่องจากการดำเนินการเดียวที่จำเป็นสำหรับคอนเทนเนอร์ที่จะใช้ในสแต็กคือ: กลับ() push_back () pop_back () เหตุใดคอนเทนเนอร์เริ่มต้นจึงเป็น deque แทนที่จะเป็นเวกเตอร์ อย่าถอดการจัดสรรใหม่ให้บัฟเฟอร์ขององค์ประกอบก่อน front () เพื่อให้ push_front () เป็นการดำเนินการที่มีประสิทธิภาพ? องค์ประกอบเหล่านี้ไม่สูญเปล่าเนื่องจากจะไม่ถูกใช้ในบริบทของสแต็ก? หากไม่มีค่าใช้จ่ายสำหรับการใช้ deque ด้วยวิธีนี้แทนเวกเตอร์เหตุใดค่าเริ่มต้นสำหรับ priority_queue จึงเป็นเวกเตอร์จึงไม่ใช่ deque ด้วย (Priority_queue ต้องการ front (), push_back () และ pop_back () - โดยพื้นฐานแล้วเหมือนกับ stack) อัปเดตตามคำตอบด้านล่าง: ดูเหมือนว่าวิธีใช้ deque มักจะเป็นอาร์เรย์ขนาดตัวแปรของอาร์เรย์ขนาดคงที่ สิ่งนี้ทำให้เติบโตเร็วกว่าเวกเตอร์ (ซึ่งต้องมีการจัดสรรใหม่และการคัดลอก) ดังนั้นสำหรับบางสิ่งเช่นสแต็กที่เกี่ยวกับการเพิ่มและลบองค์ประกอบ deque น่าจะเป็นทางเลือกที่ดีกว่า priority_queue ต้องการการจัดทำดัชนีอย่างมากเนื่องจากการลบและการแทรกทุกครั้งทำให้คุณต้องเรียกใช้ pop_heap () หรือ …
91 c++  stl  containers 

7
วิธีสร้างสตริงเส้นทางแบบเต็ม (อย่างปลอดภัย) จากสตริงแยกกัน
C ++ มีคุณสมบัติเทียบเท่ากับฟังก์ชันของ python os.path.joinหรือไม่? โดยพื้นฐานแล้วฉันกำลังมองหาสิ่งที่รวมสองส่วน (หรือมากกว่า) ของเส้นทางไฟล์เพื่อที่คุณจะได้ไม่ต้องกังวลว่าทั้งสองส่วนจะพอดีกันอย่างสมบูรณ์แบบ ถ้าอยู่ใน Qt มันก็เจ๋งเหมือนกัน โดยทั่วไปฉันใช้เวลาหนึ่งชั่วโมงในการดีบักโค้ดบางส่วนและอย่างน้อยส่วนหนึ่งก็เป็นเพราะroot + filenameต้องเป็นroot/ + filenameและฉันกำลังพยายามหลีกเลี่ยงสิ่งนั้นในอนาคต
91 c++  qt  filepath 

13
วิธีใช้ std :: sort เพื่อจัดเรียงอาร์เรย์ใน C ++
วิธีใช้ไลบรารีเทมเพลตมาตรฐานstd::sort()เพื่อจัดเรียงอาร์เรย์ที่ประกาศเป็น int v[2000]; C ++ มีฟังก์ชันบางอย่างที่สามารถรับดัชนีเริ่มต้นและสิ้นสุดของอาร์เรย์ได้หรือไม่
91 c++  sorting 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.