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

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

17
ไม่สามารถโหลด DLL (ไม่พบโมดูล HRESULT: 0x8007007E)
ฉันมีไลบรารี dll ที่มีรหัส C ++ API ที่ไม่มีการจัดการฉันจำเป็นต้องใช้ในแอปพลิเคชัน. NET 4.0 ของฉัน แต่ทุกวิธีที่ฉันพยายามโหลด dll ของฉันฉันได้รับข้อผิดพลาด: ไม่สามารถโหลด DLL 'MyOwn.dll': ไม่พบโมดูลที่ระบุ (ข้อยกเว้นจาก HRESULT: 0x8007007E) ฉันได้อ่านและลองใช้โซลูชันของ Severa ที่พบบนอินเทอร์เน็ตแล้ว ไม่มีอะไรทำงาน .. ฉันได้ลองใช้วิธีการต่อไปนี้: [DllImport("MyOwn.dll", CallingConvention = CallingConvention.Cdecl)] [return: MarshalAs((UnmanagedType.I4))] public static extern Int32 MyProIni(string DBname, string DBuser_pass, string WorkDirectory, ref StringBuilder ErrorMessage); เมื่อฉันลองทำตามบทความนี้และเมื่อฉันเรียกใช้ตัวอย่างนี้ (จากรหัสที่ดาวน์โหลดมา) มันทำงานโดยไม่มีปัญหา (dll ที่ใช้อยู่ในโฟลเดอร์ …
113 c#  c++  dll  pinvoke 

9
เป็น 'int main; โปรแกรม C / C ++ ที่ถูกต้องหรือไม่
ฉันถามเพราะดูเหมือนว่าคอมไพเลอร์ของฉันจะคิดอย่างนั้นแม้ว่าฉันจะไม่ทำก็ตาม echo 'int main;' | cc -x c - -Wall echo 'int main;' | c++ -x c++ - -Wall เสียงดังรบกวนไม่มีคำเตือนหรือข้อผิดพลาดเกี่ยวกับสิ่งนี้และ gcc จะออกเฉพาะคำเตือนที่อ่อนโยน: 'main' is usually a function [-Wmain]แต่เฉพาะเมื่อรวบรวมเป็น C การระบุ a -std=ดูเหมือนจะไม่สำคัญ มิฉะนั้นจะรวบรวมและเชื่อมโยงได้ดี แต่ในการดำเนินการมันจะสิ้นสุดลงทันทีด้วยSIGBUS(สำหรับฉัน) การอ่านคำตอบ (ยอดเยี่ยม) ที่สิ่งที่ main () ควรส่งคืนใน C และ C ++? และ grep อย่างรวดเร็วผ่านข้อกำหนดภาษาดูเหมือนว่าฉันจะต้องมีฟังก์ชันหลักอย่างแน่นอน แต่คำฟุ่มเฟือยจาก gcc -Wmain('main' …
113 c++  c  function  main  entry-point 

20
คุณจะทำซ้ำองค์ประกอบของ std :: tuple ได้อย่างไร
ฉันจะทำซ้ำบนทูเพิล (โดยใช้ C ++ 11) ได้อย่างไร ฉันลองทำสิ่งต่อไปนี้: for(int i=0; i<std::tuple_size<T...>::value; ++i) std::get<i>(my_tuple).do_sth(); แต่ไม่ได้ผล: ข้อผิดพลาด 1: ขออภัยไม่ได้ใช้งาน: ไม่สามารถขยาย 'Listener ... ' ลงในรายการอาร์กิวเมนต์ที่มีความยาวคงที่ ข้อผิดพลาด 2: ฉันไม่สามารถปรากฏในนิพจน์คงที่ ดังนั้นฉันจะทำซ้ำองค์ประกอบของทูเพิลอย่างถูกต้องได้อย่างไร

6
ฉันจะรวบรวมโครงการ Visual Studio จากบรรทัดคำสั่งได้อย่างไร
ฉันกำลังเขียนสคริปต์การชำระเงินสร้างแจกจ่ายทดสอบและคอมมิตสำหรับโซลูชัน C ++ ขนาดใหญ่ที่ใช้Monotone , CMake , Visual Studio Express 2008 และการทดสอบแบบกำหนดเอง ส่วนอื่น ๆ ทั้งหมดดูเหมือนจะตรงไปตรงมา แต่ฉันไม่เห็นวิธีการรวบรวมโซลูชัน Visual Studio โดยไม่ได้รับ GUI สคริปต์นี้เขียนด้วย Python แต่คำตอบที่ช่วยให้ฉันโทรไปที่: os.system จะทำ

5
การเข้าถึงแผนที่ C ++ ละทิ้งคุณสมบัติ (const)
รหัสต่อไปนี้ระบุว่าการส่งผ่านแผนที่constในoperator[]เมธอดจะละทิ้งคุณสมบัติ: #include <iostream> #include <map> #include <string> using namespace std; class MapWrapper { public: const int &get_value(const int &key) const { return _map[key]; } private: map<int, int> _map; }; int main() { MapWrapper mw; cout << mw.get_value(42) << endl; return 0; } นี่เป็นเพราะการจัดสรรที่เป็นไปได้ที่เกิดขึ้นในการเข้าถึงแผนที่หรือไม่? ไม่สามารถประกาศฟังก์ชันที่มีการเข้าถึงแผนที่ได้หรือไม่ MapWrapper.cpp:10: error: passing ‘const std::map<int, int, …
113 c++  stl  const  maps 

8
เมื่อใช้ส่วนหัว C ใน C ++ เราควรใช้ฟังก์ชันจาก std :: หรือ global namespace หรือไม่?
C ค่อนข้างไม่ตรงบางส่วนของ C ++ ดังนั้นเราจึงสามารถใช้ฟังก์ชัน / ส่วนหัว C ส่วนใหญ่ใน C ++ ได้โดยเปลี่ยนชื่อเล็กน้อย ( stdio.hto cstdio, stdlib.hto cstdlib) คำถามของฉันเป็นความหมายจริงๆ ในรหัส C ++ (โดยใช้คอมไพเลอร์ GCC เวอร์ชันใหม่ล่าสุด) ฉันสามารถโทรได้printf("Hello world!");และstd::printf("Hello world!");ทำงานได้เหมือนกันทุกประการ std::printf("Hello world!");และในการอ้างอิงฉันใช้มันก็จะปรากฏเป็น คำถามของฉันคือต้องการใช้std::printf();ใน C ++ หรือไม่? มีความแตกต่างหรือไม่?
113 c++  language-lawyer  std 

10
สร้าง UML จากรหัส C ++? [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ มีเครื่องมือที่สามารถแยกวิเคราะห์ไฟล์ C ++ ภายในโปรเจ็กต์และสร้าง UML จากมันได้หรือไม่
113 c++  uml 

5
โยน std ใหม่ :: ข้อยกเว้นเทียบกับการโยน std :: ข้อยกเว้น
ในขณะที่ดูรหัสบางอย่างฉันสะดุดเข้า: throw /*-->*/new std::exception ("//... และฉันคิดเสมอว่าคุณไม่ต้องการ / คุณไม่ควรใช้newที่นี่ วิธีที่ถูกต้องคืออะไรตกลงทั้งคู่ถ้าเป็นเช่นนั้นมีความแตกต่างกันอย่างไร BTW จากสิ่งที่ฉันสามารถมองเห็นขณะที่ "grepping" กับ PowerShell เพิ่ม libs throw newไม่เคยใช้ PS ยังผมพบว่าบางรหัส CLI throw gcnewที่ใช้ ไม่เป็นไร?
113 c++  exception 

14
แผนที่มาตรฐาน :: ที่ติดตามลำดับของการแทรก?
ขณะนี้ฉันมีstd::map<std::string,int>ที่เก็บค่าจำนวนเต็มให้กับตัวระบุสตริงที่ไม่ซ้ำกันและฉันค้นหาด้วยสตริง ส่วนใหญ่ทำในสิ่งที่ฉันต้องการยกเว้นว่าจะไม่ติดตามลำดับการแทรก ดังนั้นเมื่อฉันทำแผนที่ซ้ำเพื่อพิมพ์ค่าพวกมันจะถูกจัดเรียงตามสตริง แต่ฉันต้องการให้เรียงลำดับตามลำดับของการแทรก (ครั้งแรก) ฉันคิดจะใช้ a vector<pair<string,int>>แทน แต่ฉันต้องค้นหาสตริงและเพิ่มค่าจำนวนเต็มประมาณ 10,000,000 ครั้งดังนั้นฉันไม่รู้ว่า a std::vectorจะช้าลงอย่างมากหรือไม่ มีวิธีใช้std::mapหรือมีstdภาชนะอื่นที่เหมาะกับความต้องการของฉันมากกว่านี้หรือไม่? [ฉันใช้ GCC 3.4 และฉันอาจมีค่าไม่เกิน 50 คู่ในตัวstd::map] ขอบคุณ.

8
วิธีการเพาะเมล็ด mt19937 PRNG อย่างกระชับพอเพียงและละเอียด
ดูเหมือนว่าฉันจะเห็นคำตอบมากมายที่มีคนแนะนำให้ใช้<random>เพื่อสร้างตัวเลขสุ่มโดยปกติจะมีโค้ดดังนี้: std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(0, 5); dis(gen); โดยปกติสิ่งนี้จะแทนที่ "สิ่งที่น่าสะอิดสะเอียน" บางประเภทเช่น: srand(time(NULL)); rand()%6; เราอาจวิพากษ์วิจารณ์วิธีการเดิมโดยการโต้เถียงว่าtime(NULL)ให้เอนโทรปีต่ำtime(NULL)สามารถคาดเดาได้และผลลัพธ์สุดท้ายก็ไม่เหมือนกัน แต่ทั้งหมดนี้เป็นความจริงในรูปแบบใหม่: มีเพียงแผ่นไม้อัดที่เงางามกว่า rd()ส่งกลับไฟล์unsigned int. สิ่งนี้มีอย่างน้อย 16 บิตและอาจเป็น 32 บิตนั่นไม่เพียงพอที่จะเริ่มต้นสถานะ 19937 บิตของ MT การใช้std::mt19937 gen(rd());gen()(การเพาะด้วย 32 บิตและดูที่ผลลัพธ์แรก) ไม่ได้ให้การกระจายเอาต์พุตที่ดี 7 และ 13 ไม่สามารถเป็นเอาต์พุตแรกได้ สองเมล็ดผลิต 0. สิบสองเมล็ดผลิต 1226181350. ( Link ) std::random_deviceอาจเป็นได้และบางครั้งก็ใช้เป็น PRNG แบบธรรมดาที่มีเมล็ดพันธุ์คงที่ ดังนั้นจึงอาจสร้างลำดับเดียวกันในทุกครั้ง ( เชื่อมโยง ) …
113 c++  c++11  random 

6
มีการอนุมานประเภทอัตโนมัติใน Java หรือไม่?
มีautoประเภทตัวแปรใน Java เช่นเดียวกับที่คุณมีใน C ++ หรือไม่? ตัวอย่าง: for ( auto var : object_array) std::cout << var << std::endl; for( auto var : object_array) var.do_something_that_only_this_particular_obj_can_do(); ฉันรู้ว่ามีการปรับปรุงสำหรับลูปใน Java แต่มีอัตโนมัติหรือไม่ ถ้าไม่มีการแฮ็กเพื่อทำสิ่งนี้หรือไม่? ฉันกำลังอ้างถึงคุณสมบัติใหม่ใน C ++ 11
113 java  c++  auto 

4
คลาส enum สามารถแปลงเป็นประเภทพื้นฐานได้หรือไม่
มีวิธีการแปลงenum classฟิลด์เป็นชนิดพื้นฐานหรือไม่? ฉันคิดว่านี่จะเป็นไปโดยอัตโนมัติ แต่ดูเหมือนจะไม่ใช่ enum class my_fields : unsigned { field = 1 }; unsigned a = my_fields::field; GCC ปฏิเสธงานนั้น error: cannot convert 'my_fields' to 'unsigned int' in assignment.
113 c++  c++11 

6
เหตุใดเราจึงใช้ "std :: move" บนวัตถุ "const" ได้
ใน C ++ 11 เราสามารถเขียนโค้ดนี้: struct Cat { Cat(){} }; const Cat cat; std::move(cat); //this is valid in C++11 เมื่อฉันเรียกstd::moveมันหมายความว่าฉันต้องการย้ายวัตถุกล่าวคือฉันจะเปลี่ยนวัตถุ การย้ายconstวัตถุเป็นเรื่องที่ไม่สมเหตุสมผลเหตุใดจึงstd::moveไม่ จำกัด พฤติกรรมนี้ มันจะเป็นกับดักในอนาคตใช่ไหม? ที่นี่หมายถึงกับดักตามที่ Brandon กล่าวไว้ในความคิดเห็น: "ฉันคิดว่าเขาหมายถึงมัน" กับดัก "เขาส่อเสียดส่อเสียดเพราะถ้าเขาไม่รู้ตัวเขาก็จบลงด้วยการลอกเลียนแบบซึ่งไม่ใช่สิ่งที่เขาตั้งใจไว้" ในหนังสือ 'Effective Modern C ++' โดย Scott Meyers เขายกตัวอย่าง: class Annotation { public: explicit Annotation(const std::string text) : value(std::move(text)) //here …
113 c++  c++11 



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