แปลว่าอะไร?


92

ฉันมี 2 คลาส:

class base {
    virtual void foo() {};
};

class derived : public base {
    void foo() { base::foo(); }
};

ฉันทำผิดพลาดและเขียนแทนbase:foo(); base::foo();มีการคอมไพล์และรันโค้ด แต่ผิดพลาด

ฉันไม่รู้ว่าฉันสามารถ Google ได้อย่างไรและไม่รู้ว่ามันคืออะไร แต่ฉันสนใจมากนั่นหมายความว่าอย่างไร

base:foo();

หากมีความสำคัญ:

class base : public QAbstractGraphicsShapeItem

32
มันเป็นป้าย
chris

20
นี่เป็นกรณีที่การเปิดคำเตือนช่วยให้ดูสด ... warning: label 'base' defined but not used [-Wunused-label]... บางทีเราอาจต้องเพิ่มหน้าถามคำถามนี้: คุณได้ลองเปิดคำเตือนหรือไม่
Shafik Yaghmour

6
ที่จบลงด้วยสแตกล้น เหมาะสมแค่ไหน!
Laurent LA RIZZA

คำตอบ:


125
void foo() { base:foo(); }

เทียบเท่ากับ:

void foo()
{
   base: // An unused label.
   foo(); // Calls the function again, resulting in infinite recursion.
}

เนื่องจากการเรียกซ้ำไม่สิ้นสุดฟังก์ชันจึงทำให้เกิดสแตกล้น


1
ใช่ฉันพบข้อผิดพลาดนั้นเมื่อฉันเห็นการโทรหลายครั้งfoo()ในกลุ่มการโทร ขอบคุณ
railmisaka

มีคำเตือนสำหรับสิ่งนี้ใน gcc / clang ฯลฯ หรือไม่
ไร้สาระ

10
@Serthy เมื่อฉันใช้-Wallฉันได้รับข้อความเตือน: socc.cc:3:4: Warning: label 'base' ที่กำหนดไว้ แต่ไม่ได้ใช้ [-Wunused-label] base: // ป้ายที่ไม่ได้ใช้
ราหู

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