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

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

8
การประกาศฟังก์ชันภายในหรือภายนอกคลาส
ฉันเป็นนักพัฒนา JAVA ที่พยายามเรียนรู้ C ++ แต่ฉันไม่รู้จริงๆว่าแนวทางปฏิบัติที่ดีที่สุดสำหรับการประกาศฟังก์ชันมาตรฐานคืออะไร ในห้องเรียน: class Clazz { public: void Fun1() { //do something } } หรือภายนอก: class Clazz { public: void Fun1(); } Clazz::Fun1(){ // Do something } ฉันมีความรู้สึกว่าอันที่สองอ่านได้น้อย ...
91 c++  inline 

9
เข้าถึงฟิลด์ส่วนตัวของวัตถุอื่นในคลาสเดียวกัน
class Person { private BankAccount account; Person(BankAccount account) { this.account = account; } public Person someMethod(Person person) { //Why accessing private field is possible? BankAccount a = person.account; } } โปรดลืมเกี่ยวกับการออกแบบ ฉันรู้ว่า OOP ระบุว่าไพรเวทอ็อบเจ็กต์เป็นส่วนตัวสำหรับคลาส คำถามของฉันคือทำไม OOP การออกแบบดังกล่าวว่าเขตข้อมูลส่วนตัวที่มีสิทธิ์เข้าถึงระดับระดับสูงและไม่เข้าถึงวัตถุระดับ ?
91 java  c++  .net  oop 

3
LPCWSTR ย่อมาจากอะไรและควรจัดการอย่างไร?
ก่อนอื่นมันคืออะไรกันแน่? ฉันเดาว่ามันเป็นตัวชี้ (LPC หมายถึงค่าคงที่ตัวชี้แบบยาว) แต่ "W" หมายถึงอะไร? เป็นตัวชี้เฉพาะไปยังสตริงหรือตัวชี้ไปยังสตริงเฉพาะหรือไม่? ตัวอย่างเช่นฉันต้องการปิดหน้าต่างชื่อ "TestWindow" HWND g_hTest; LPCWSTR a; *a = ("TestWindow"); g_hTest = FindWindowEx(NULL, NULL, NULL, a); DestroyWindow(g_hTest); รหัสนี้ผิดกฎหมายและใช้ไม่ได้เนื่องจาก const char [6] ไม่สามารถแปลงเป็น CONST WCHAR ได้ ฉันไม่เข้าใจเลย ฉันต้องการทำความเข้าใจที่ชัดเจนเกี่ยวกับ LPCWSTR, LPCSTR, LPSTR เหล่านี้ ฉันพยายามค้นหาบางสิ่ง แต่ฉันก็สับสนมากขึ้น ที่ไซต์ msdn FindWindowExถูกประกาศเป็น HWND FindWindowEx( HWND hwndParent, HWND hwndChildAfter, LPCTSTR …
91 c++  winapi  lpcstr 

4
ข้อผิดพลาดของเทมเพลตที่สับสน
ฉันเล่นกับเสียงดังมาระยะหนึ่งแล้วและฉันก็สะดุดกับ "test / SemaTemplate / depend-template-recover.cpp" (ในการแจกแจงเสียงดัง) ซึ่งควรให้คำแนะนำในการกู้คืนจากข้อผิดพลาดของเทมเพลต สิ่งทั้งหมดสามารถถอดออกเป็นตัวอย่างเล็กน้อยได้อย่างง่ายดาย: template<typename T, typename U, int N> struct X { void f(T* t) { // expected-error{{use 'template' keyword to treat 'f0' as a dependent template name}} t->f0<U>(); } }; ข้อความแสดงข้อผิดพลาดที่เกิดจากเสียงดังลั่น: tpl.cpp:6:13: error: use 'template' keyword to treat 'f0' as a dependent template …
91 c++  templates  llvm  clang 

1
Array [n] vs Array [10] - การเริ่มต้นอาร์เรย์ด้วยตัวแปรเทียบกับจำนวนจริง
ฉันมีปัญหาต่อไปนี้กับรหัสของฉัน: int n = 10; double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; ส่งกลับข้อผิดพลาดต่อไปนี้: error: variable-sized object 'tenorData' may not be initialized ในขณะที่ใช้double tenorData[10]งาน ใครทราบสาเหตุ?

12
ในกรณีนี้มีความแตกต่างระหว่างการใช้รายการเริ่มต้นของสมาชิกและการกำหนดค่าในตัวสร้างหรือไม่?
ภายในและเกี่ยวกับโค้ดที่สร้างขึ้นมีความแตกต่างระหว่าง: MyClass::MyClass(): _capacity(15), _data(NULL), _len(0) { } และ MyClass::MyClass() { _capacity=15; _data=NULL; _len=0 } ขอบคุณ ...

2
GNU GCC (g ++): เหตุใดจึงสร้าง dtors หลายตัว
การพัฒนาสภาพแวดล้อม: GNU GCC (g ++) 4.1.2 ในขณะที่ฉันกำลังพยายามตรวจสอบวิธีเพิ่ม 'การครอบคลุมโค้ด - โดยเฉพาะการครอบคลุมฟังก์ชัน' ในการทดสอบหน่วยฉันพบว่า dtor บางคลาสดูเหมือนจะถูกสร้างขึ้นหลายครั้ง พวกคุณบางคนมีความคิดว่าทำไมโปรด? ฉันพยายามและสังเกตสิ่งที่ฉันกล่าวถึงข้างต้นโดยใช้รหัสต่อไปนี้ ใน "test.h" class BaseClass { public: ~BaseClass(); void someMethod(); }; class DerivedClass : public BaseClass { public: virtual ~DerivedClass(); virtual void someMethod(); }; ใน "test.cpp" #include <iostream> #include "test.h" BaseClass::~BaseClass() { std::cout << "BaseClass dtor …
91 c++  g++  destructor 

7
ตัวแปรคงที่ระดับฟังก์ชันจะได้รับการจัดสรร / เริ่มต้นเมื่อใด
ฉันค่อนข้างมั่นใจว่าตัวแปรที่ประกาศทั่วโลกได้รับการจัดสรร (และเริ่มต้นถ้ามี) ในเวลาเริ่มโปรแกรม int globalgarbage; unsigned int anumber = 42; แต่สิ่งที่คงที่ที่กำหนดไว้ในฟังก์ชัน? void doSomething() { static bool globalish = true; // ... } globalishจัดสรรพื้นที่เมื่อใด ฉันคาดเดาเมื่อรายการเริ่มต้นขึ้น แต่มันเริ่มต้นแล้วด้วยหรือไม่? หรือเริ่มต้นเมื่อdoSomething()ถูกเรียกครั้งแรก?
91 c++  variables 

8
วิธีบันทึกเว็บแคมและเสียงโดยใช้ webRTC และการเชื่อมต่อแบบเพียร์บนเซิร์ฟเวอร์
ฉันต้องการบันทึกเว็บแคมและเสียงของผู้ใช้และบันทึกลงในไฟล์บนเซิร์ฟเวอร์ จากนั้นไฟล์เหล่านี้จะสามารถให้บริการแก่ผู้ใช้รายอื่นได้ ฉันไม่มีปัญหากับการเล่น แต่ฉันมีปัญหาในการบันทึกเนื้อหา ความเข้าใจของฉันคือ.record()ฟังก์ชั่นgetUserMedia ยังไม่ได้เขียน - มีเพียงข้อเสนอเท่านั้นที่ถูกสร้างขึ้น ฉันต้องการสร้างการเชื่อมต่อแบบเพียร์บนเซิร์ฟเวอร์ของฉันโดยใช้ PeerConnectionAPI ฉันเข้าใจว่านี่เป็นการแฮ็คเล็กน้อย แต่ฉันคิดว่ามันน่าจะเป็นไปได้ที่จะสร้างเพียร์บนเซิร์ฟเวอร์และบันทึกสิ่งที่ไคลเอ็นต์ - เพียร์ส่งมา หากเป็นไปได้ฉันควรจะสามารถบันทึกข้อมูลนี้เป็น flv หรือรูปแบบวิดีโออื่น ๆ ได้ ความต้องการของฉันคือการบันทึกเว็บแคม + ฝั่งไคลเอ็นต์เสียงเพื่อให้ไคลเอ็นต์บันทึกวิดีโอซ้ำได้หากพวกเขาไม่ชอบความพยายามครั้งแรกก่อนที่จะอัปโหลด นอกจากนี้ยังอนุญาตให้มีการหยุดชะงักในการเชื่อมต่อเครือข่าย ฉันเคยเห็นรหัสบางอย่างที่อนุญาตให้บันทึก 'ภาพ' แต่ละภาพจากเว็บแคมโดยการส่งข้อมูลไปยังผืนผ้าใบ - มันเยี่ยมมาก แต่ฉันก็ต้องการเสียงด้วย นี่คือรหัสฝั่งไคลเอ็นต์ที่ฉันมีอยู่: <video autoplay></video> <script language="javascript" type="text/javascript"> function onVideoFail(e) { console.log('webcam fail!', e); }; function hasGetUserMedia() { // Note: Opera is unprefixed. …

5
การลบตัวชี้ไปที่ const (T const *)
ฉันมีคำถามพื้นฐานเกี่ยวกับตัวชี้ const ฉันไม่ได้รับอนุญาตให้เรียกใช้ฟังก์ชันสมาชิกที่ไม่ใช่ const โดยใช้ตัวชี้ const อย่างไรก็ตามฉันได้รับอนุญาตให้ทำสิ่งนี้กับตัวชี้ const: delete p; สิ่งนี้จะเรียกตัวทำลายของคลาสซึ่งในสาระสำคัญคือ 'วิธีการ' ที่ไม่ใช่ const เหตุใดจึงได้รับอนุญาต เป็นเพียงการสนับสนุนสิ่งนี้หรือไม่: delete this; หรือมีเหตุผลอื่น?

3
shared_ptr มายากล :)
นายLidströmและฉันมีข้อโต้แย้ง :) คำกล่าวอ้างของMr.Lidströmคือโครงสร้างshared_ptr<Base> p(new Derived);ไม่ต้องการให้ Base มีตัวทำลายเสมือน: Armen Tsirunyan : "จริงเหรอshared_ptr จะล้างข้อมูลอย่างถูกต้องหรือไม่ในกรณีนี้คุณช่วยสาธิตวิธีการใช้เอฟเฟกต์นั้นได้ไหม" Daniel Lidström : " shared_ptrใช้ตัวทำลายของตัวเองเพื่อลบอินสแตนซ์คอนกรีตสิ่งนี้เรียกว่า RAII ในชุมชน C ++ คำแนะนำของฉันคือคุณเรียนรู้ทุกอย่างเกี่ยวกับ RAII มันจะทำให้การเข้ารหัส C ++ ของคุณง่ายขึ้นมากเมื่อคุณใช้ RAII ในทุกสถานการณ์ " Armen Tsirunyan : "ฉันรู้เกี่ยวกับ RAII และฉันก็รู้ด้วยว่าในที่สุดตัวทำลายshared_ptrอาจลบ px ที่เก็บไว้เมื่อ pn ถึง 0 แต่ถ้า px มีตัวชี้ประเภทคงที่Baseและตัวชี้ชนิดไดนามิกเป็นDerivedดังนั้นเว้นแต่จะBaseมีตัวทำลายเสมือน จะส่งผลให้เกิดพฤติกรรมที่ไม่ได้กำหนดแก้ไขฉันถ้าฉันทำผิด " Daniel Lidström : " …

14
C ++: พิมพ์ค่า enum เป็นข้อความ
ถ้าฉันมี enum แบบนี้ enum Errors {ErrorA=0, ErrorB, ErrorC}; จากนั้นฉันต้องการพิมพ์ลงในคอนโซล Errors anError = ErrorA; cout<<anError;/// 0 will be printed แต่สิ่งที่ฉันต้องการคือข้อความ "ErrorA" ฉันสามารถทำได้โดยไม่ใช้ if / switch หรือไม่? แล้วทางออกของคุณสำหรับเรื่องนี้คืออะไร?
91 c++  enums 

8
จะแก้ไขข้อผิดพลาด“ Windows SDK version 8.1” ได้อย่างไร?
ฉันเพิ่งอัปเดต Visual Studio 2015 และตอนนี้เมื่อฉันพยายามสร้างโครงการใด ๆมันมักจะล้มเหลวและฉันได้รับข้อผิดพลาด คำอธิบายรหัสความรุนแรงข้อผิดพลาดสถานะการปราบปรามบรรทัดไฟล์โครงการ MSB8036 ไม่พบ Windows SDK เวอร์ชัน 8.1 ติดตั้ง Windows SDK เวอร์ชันที่ต้องการหรือเปลี่ยนเวอร์ชัน SDK ในหน้าคุณสมบัติโปรเจ็กต์หรือโดยคลิกขวาที่โซลูชันแล้วเลือก "กำหนดเป้าหมายโซลูชัน" Proj D: \ Program Files (x86) \ visual studio 2017 \ Common7 \ IDE \ VC \ VCTargets \ Platforms \ Win32 \ PlatformToolsets \ v141 \ Toolset.targets 34 ฉันกำหนดเป้าหมายโซลูชันใหม่ตามที่ได้กล่าวไว้และปัญหายังคงมีอยู่แม้ว่าการกำหนดเป้าหมายใหม่จะเสร็จสิ้นแล้วก็ตามฉันตัดสินใจที่จะติดตั้ง …

8
วิธีอ่านค่าจากรีจิสทรีของ Windows
ระบุคีย์สำหรับค่ารีจิสทรีบางอย่าง (เช่น HKEY_LOCAL_MACHINE \ blah \ blah \ blah \ foo) ฉันจะทำอย่างไร: ตรวจสอบอย่างปลอดภัยว่ามีคีย์ดังกล่าวอยู่ โดยทางโปรแกรม (เช่นด้วยรหัส) จะได้รับค่าของมัน ฉันไม่มีความตั้งใจที่จะเขียนอะไรกลับไปที่รีจิสตรี (ในช่วงอาชีพของฉันถ้าฉันสามารถช่วยได้) ดังนั้นเราสามารถข้ามการบรรยายเกี่ยวกับทุกอณูในร่างกายของฉันที่ระเบิดด้วยความเร็วแสงถ้าฉันเขียนลงในรีจิสทรีไม่ถูกต้อง ต้องการคำตอบใน C ++ แต่ส่วนใหญ่เพียงแค่ต้องรู้ว่าคาถา Windows API พิเศษที่จะได้รับคืออะไร
91 c++  windows  winapi  registry 

6
เทมเพลตฟังก์ชัน C ++ เฉพาะบางส่วน?
ฉันรู้ว่าโค้ดด้านล่างนี้เป็นความเชี่ยวชาญเฉพาะบางส่วนของคลาส: template <typename T1, typename T2> class MyClass { … }; // partial specialization: both template parameters have same type template <typename T> class MyClass<T,T> { … }; นอกจากนี้ฉันรู้ว่า C ++ ไม่อนุญาตความเชี่ยวชาญเฉพาะบางส่วนของเทมเพลตฟังก์ชัน (อนุญาตให้ใช้แบบเต็มเท่านั้น) แต่รหัสของฉันหมายความว่าฉันมีความเชี่ยวชาญเฉพาะบางส่วนของเทมเพลตฟังก์ชันสำหรับอาร์กิวเมนต์ประเภทเดียว / ประเภทเดียวกันหรือไม่ เพราะมันใช้งานได้กับ Microsoft Visual Studio 2010 Express! ถ้าไม่คุณช่วยอธิบายแนวคิดความเชี่ยวชาญเฉพาะบางส่วนได้ไหม #include <iostream> using std::cin; using std::cout; using …

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