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

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

4
ความหมายหลายอย่างของความเชี่ยวชาญเทมเพลตเมื่อใช้วัตถุที่แตกต่างกัน
เมื่อฉันใช้เทมเพลตพิเศษในไฟล์ออบเจ็กต์อื่นฉันได้รับข้อผิดพลาด "คำจำกัดความหลายรายการ" เมื่อทำการเชื่อมโยง วิธีแก้ปัญหาเดียวที่ฉันพบคือการใช้ฟังก์ชัน "อินไลน์" แต่ดูเหมือนวิธีแก้ปัญหาบางอย่าง ฉันจะแก้ปัญหาโดยไม่ใช้คีย์เวิร์ด "อินไลน์" ได้อย่างไร ถ้าเป็นไปไม่ได้ทำไม? นี่คือรหัสตัวอย่าง: paulo@aeris:~/teste/cpp/redef$ cat hello.h #ifndef TEMPLATE_H #define TEMPLATE_H #include <iostream> template <class T> class Hello { public: void print_hello(T var); }; template <class T> void Hello<T>::print_hello(T var) { std::cout << "Hello generic function " << var << "\n"; } template …
100 c++  templates 

9
ข้อผิดพลาดในการคอมไพล์:“ g ++: เกิดข้อผิดพลาดขณะพยายาม exec 'cc1plus': execvp: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว "
เมื่อฉันรวบรวมโปรแกรม C / C ++ ด้วยpopenในphp... ฉันได้รับข้อผิดพลาดนี้: g++: error trying to exec 'cc1plus': execvp: No such file or directory แต่ถ้าฉันเรียกใช้โค้ด php ในเชลล์ .. ก็ใช้ได้ดี .. ใน Arch Linux .. รหัส PHP: <?php function rfile($fp) { $out=""; while (!feof($fp)) { $out.= fgets($fp, 1024000); } return $out; } $p = popen('g++ -Wall …
100 php  c++  c  linux  gcc 

3
บุคคลนี้เขียนโค้ด“ Hello World” ด้วย Microsoft Paint ได้อย่างไร
ฉันเพิ่งเห็นสิ่งนี้ภายในไม่กี่วันที่ผ่านมาและไม่สามารถเข้าใจได้ว่ามันทำงานอย่างไร วิดีโอที่ฉันพูดถึงอยู่ที่นี่ : เป็นคำตอบยอดนิยมจากคำถาม Stack Overflow: เหตุใดโปรแกรมนี้จึงถูกคอมไพเลอร์สามตัวปฏิเสธ บิตแมปนี้สามารถแสดงโปรแกรม C ++ สำหรับ "Hello World" ได้อย่างไร
99 c++  c  paint 

3
ตัวชี้ไปยังฐานสามารถชี้ไปยังอาร์เรย์ของวัตถุที่ได้รับหรือไม่?
วันนี้ฉันไปสัมภาษณ์งานและได้รับคำถามที่น่าสนใจนี้ นอกจากหน่วยความจำรั่วและไม่มี virtual dtor เหตุใดรหัสนี้จึงผิดพลาด #include <iostream> //besides the obvious mem leak, why does this code crash? class Shape { public: virtual void draw() const = 0; }; class Circle : public Shape { public: virtual void draw() const { } int radius; }; class Rectangle : public Shape { …
99 c++  pointers 

14
ฉันควรสืบทอดจาก std :: ข้อยกเว้นหรือไม่
ผมเคยเห็นแหล่งที่เชื่อถือได้อย่างน้อยหนึ่ง (คลาส c ++ ผมเอา) ขอแนะนำให้ใช้เฉพาะการเรียนการยกเว้นใน C ++ std::exceptionควรสืบทอดจาก ฉันไม่ชัดเจนเกี่ยวกับประโยชน์ของแนวทางนี้ ใน C # เหตุผลในการสืบทอดApplicationExceptionนั้นชัดเจน: คุณจะได้รับวิธีการคุณสมบัติและตัวสร้างที่เป็นประโยชน์จำนวนหนึ่งและต้องเพิ่มหรือแทนที่สิ่งที่คุณต้องการ ด้วยstd::exceptionมันก็ดูเหมือนว่าสิ่งที่คุณได้รับคือwhat()วิธีการที่จะแทนที่ซึ่งคุณสามารถเช่นเดียวกับดีสร้างขึ้นเอง ดังนั้นประโยชน์ของการใช้std::exceptionเป็นคลาสพื้นฐานสำหรับคลาสข้อยกเว้นเฉพาะแอปพลิเคชันของฉันคืออะไร? มีเหตุผลที่ดีที่จะไม่สืบทอดstd::exceptionหรือไม่?

10
วิธีการแปลงจาก int เป็นถ่าน *
วิธีเดียวที่ฉันรู้คือ: #include <sstream> #include <string.h> using namespace std; int main() { int number=33; stringstream strs; strs << number; string temp_str = strs.str(); char* char_type = (char*) temp_str.c_str(); } แต่มีวิธีใดบ้างที่พิมพ์น้อยลง?

2
อะไรคือกฎสำหรับโทเค็น“ …” ในบริบทของเทมเพลตแบบต่างๆ
ใน C ++ 11 มีเทมเพลตที่หลากหลายเช่นนี้: template< class T, class... Args > unique_ptr<T> make_unique( Args&&... args ) { return unique_ptr<T>(new T(std::forward<Args>(args)...)); } มีวิทยากรบางคนเกี่ยวกับเรื่องนี้: การแสดงออกstd::forward<Args>(args)...ใช้ทั้งArgsและargsแต่เพียงหนึ่ง...โทเค็น นอกจากนี้ยังstd::forwardเป็นฟังก์ชันเทมเพลตที่ไม่แปรผันโดยใช้พารามิเตอร์เทมเพลตเดียวและอาร์กิวเมนต์เดียว กฎไวยากรณ์สำหรับสิ่งนั้น (คร่าวๆ) คืออะไร? จะสรุปได้อย่างไร? นอกจากนี้: ในการใช้งานฟังก์ชันจุดไข่ปลา ( ...) อยู่ที่ส่วนท้ายของนิพจน์ที่สนใจ มีเหตุผลไหมที่ในรายการอาร์กิวเมนต์เทมเพลตและรายการพารามิเตอร์ที่จุดไข่ปลาอยู่ตรงกลาง

7
เหตุใดออบเจ็กต์ของคลาสเดียวกันจึงเข้าถึงข้อมูลส่วนตัวของกันและกันได้
เหตุใดออบเจ็กต์ของคลาสเดียวกันจึงเข้าถึงข้อมูลส่วนตัวของกันและกันได้ class TrivialClass { public: TrivialClass(const std::string& data) : mData(data) {}; const std::string& getData(const TrivialClass& rhs) const { return rhs.mData; }; private: std::string mData; }; int main() { TrivialClass a("fish"); TrivialClass b("heads"); std::cout << "b via a = " << a.getData(b) << std::endl; return 0; } รหัสนี้ใช้งานได้ เป็นไปได้อย่างสมบูรณ์แบบสำหรับวัตถุ a ในการเข้าถึงข้อมูลส่วนตัวจากวัตถุ …

5
เหตุใด C ++ จึงต้องการคอนสตรัคเตอร์เริ่มต้นที่ผู้ใช้กำหนดเพื่อสร้างอ็อบเจกต์ const เริ่มต้น
มาตรฐาน C ++ (ส่วนที่ 8.5) กล่าวว่า: หากโปรแกรมเรียกใช้การเริ่มต้นเริ่มต้นของอ็อบเจ็กต์ที่มีคุณสมบัติ const ชนิด T T จะเป็นประเภทคลาสที่มีตัวสร้างดีฟอลต์ที่ผู้ใช้ระบุ ทำไม? ฉันนึกไม่ออกว่าทำไมต้องใช้ตัวสร้างที่ผู้ใช้จัดหามาในกรณีนี้ struct B{ B():x(42){} int doSomeStuff() const{return x;} int x; }; struct A{ A(){}//other than "because the standard says so", why is this line required? B b;//not required for this example, just to illustrate //how this situation …
99 c++ 


4
ความต้องการของเทมเพลตแลมด้าที่นำมาใช้ใน C ++ 20 คืออะไรเมื่อ C ++ 14 มีแลมด้าทั่วไปอยู่แล้ว
c ++ 14 แนะนำ lambdas ทั่วไปที่ทำให้สามารถเขียนต่อไปนี้: auto func = [](auto a, auto b){ return a + b; }; auto Foo = func(2, 5); auto Bar = func("hello", "world"); เป็นที่ชัดเจนมากว่าแลมบ์ดาทั่วไปนี้funcทำงานได้เหมือนกับฟังก์ชันเทมเพลตfuncจะทำงานได้ เหตุใดคณะกรรมการ C ++ จึงตัดสินใจเพิ่มไวยากรณ์เทมเพลตสำหรับ Lamda ทั่วไป

14
วิธีการเขียนฐานบันทึก (2) ใน c / c ++
มีวิธีใดในการเขียนฟังก์ชันบันทึก (ฐาน 2) หรือไม่? ภาษา C มี 2 ฟังก์ชันในตัว - >> 1. logซึ่งเป็นฐาน e. 2. log10ฐาน 10; แต่ฉันต้องการฟังก์ชันบันทึกของฐาน 2 วิธีคำนวณสิ่งนี้
99 c++  c 

16
การแบ่งคลาส C ++ แบบเทมเพลเป็นไฟล์. hpp / .cpp - เป็นไปได้ไหม
ฉันได้รับข้อผิดพลาดในการพยายามรวบรวมคลาสเทมเพลต C ++ ซึ่งแยกระหว่าง a .hppและ.cppไฟล์: $ g++ -c -o main.o main.cpp $ g++ -c -o stack.o stack.cpp $ g++ -o main main.o stack.o main.o: In function `main': main.cpp:(.text+0xe): undefined reference to 'stack<int>::stack()' main.cpp:(.text+0x1c): undefined reference to 'stack<int>::~stack()' collect2: ld returned 1 exit status make: *** [program] Error 1 นี่คือรหัสของฉัน: …

6
วิธีการสุ่ม std :: vector?
ฉันกำลังมองหาวิธีทั่วไปที่ใช้ซ้ำได้ในการสลับไฟล์std::vectorใน C ++ นี่เป็นวิธีที่ฉันทำในปัจจุบัน แต่ฉันคิดว่ามันไม่ค่อยมีประสิทธิภาพเพราะมันต้องการอาร์เรย์กลางและจำเป็นต้องรู้ประเภทรายการ (DeckCard ในตัวอย่างนี้): srand(time(NULL)); cards_.clear(); while (temp.size() > 0) { int idx = rand() % temp.size(); DeckCard* card = temp[idx]; cards_.push_back(card); temp.erase(temp.begin() + idx); }
99 c++  shuffle  stdvector 

15
std :: string to float หรือ double
ฉันกำลังพยายามแปลงstd::stringเป็นfloat/doubleไฟล์. ฉันเหนื่อย: std::string num = "0.6"; double temp = (double)atof(num.c_str()); แต่จะส่งกลับศูนย์เสมอ วิธีอื่น ๆ ?
99 c++ 

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