ข้อผิดพลาด: ตัวแปรหรือฟิลด์ 'myfunction' ประกาศเป็นโมฆะ [ซ้ำกัน]

ต่อไปนี้ ฉันยังไม่ได้กำหนดประเภท doesntexist

void myfunction(doesntexist argument)
{
}

GCC 4.7.2 บอกว่า "error: variable or field ‘myfunction’ declared void"

คำถามของฉันคือ: คอมไพเลอร์กำลังคิดอะไรที่นี่เพื่ออ้างถึงชื่อฟังก์ชันที่เป็นโมฆะและไม่ใช่ประเภทอาร์กิวเมนต์

[แก้ไข]
ก่อนที่จะลงคะแนน โปรดทราบว่าคำตอบสำหรับปัญหานี้เกี่ยวข้องกับลำดับของข้อผิดพลาดและ -Wfatal-errors หยุดการพิมพ์ข้อความที่เกี่ยวข้องในทันทีมากกว่า . นี่ไม่ใช่แค่ฉันเท่านั้นที่ต้องอ่านข้อความคอมไพเลอร์ที่คลุมเครือเล็กน้อย


person jozxyqk    schedule 13.11.2013    source แหล่งที่มา
comment
gcc 4.7.2 ของฉันแจ้งว่าข้อผิดพลาด: ชื่อประเภทที่ไม่รู้จัก 'doesntexist' ฉันคิดว่า SSCCE (sscce.org) อาจจะเป็นระเบียบ   -  person NPE    schedule 13.11.2013
comment
กรุณาแสดงบันทึกข้อผิดพลาด สมบูรณ์ และ ไม่มีการแก้ไข   -  person Some programmer dude    schedule 13.11.2013
comment
coliru.stacked-crooked.com/a/6bbe3a44df482b5a   -  person Mark Garcia    schedule 13.11.2013
comment
@MarkGarcia หากคอมไพล์ด้วย gcc รหัสของคุณจะส่งผลให้เกิดข้อผิดพลาดเนื่องจากสิ่งเหล่านั้นเป็นไลบรารี c++   -  person Mike G    schedule 13.11.2013
comment
refer to the function name being void and not the argument type? คอมไพเลอร์ไม่ได้กล่าวไว้ มันรับรู้ว่า myfunction ไม่ใช่ฟังก์ชัน แต่เป็นตัวแปร และบอกว่าตัวแปรนี้ประกาศด้วยประเภท void (คุณไม่สามารถมีตัวแปรประเภท void ใน C และ C++ ได้) คอมไพเลอร์บรรทัดถัดไประบุสาเหตุที่แน่ชัดว่าทำไมสิ่งนี้ถึงเกิดขึ้น: ‘doesntexist’ was not declared in this scope   -  person Ivan Aksamentov - Drop    schedule 13.11.2013
comment
การอัปเดตความคิดเห็นก่อนหน้าของฉัน: เมื่อฉันคอมไพล์โค้ดเป็น C ฉันได้รับข้อความที่ฉันยกมาก่อนหน้านี้ เมื่อคอมไพล์เป็น C++ โค้ดจะให้ข้อผิดพลาดที่คุณอ้างอิงตามด้วย error: 'doesntexist' was not declared in this scope   -  person NPE    schedule 13.11.2013
comment
คอมไพล์เป็น C คอมไพล์ยังไงคะ?   -  person Ivan Aksamentov - Drop    schedule 13.11.2013


คำตอบ (3)


ขอบคุณ @JoachimPileborg บันทึกข้อผิดพลาดที่ยังไม่ได้แก้ไขไม่มีประโยชน์ใดๆ และควรมี! ความคิดเห็นนำฉันไปสู่ปัญหาและวิธีแก้ไข... ลบ -Wfatal-errors ออกจาก makefile ของฉัน

19:17 >>> gcc -Wfatal-errors main.c
main.c:2:17: error: variable or field ‘myfunction’ declared void
compilation terminated due to -Wfatal-errors.

และลบ -Wfatal-errors...

19:18 >>> gcc main.c 
main.c:2:17: error: variable or field ‘myfunction’ declared void
main.c:2:17: error: ‘doesntexist’ was not declared in this scope

แก้ไขปัญหา.


สำหรับผู้ที่พูดว่า "ทำไมต้องใช้ -Wfatal-errors ในตอนแรก": ฉันมักจะไม่ต้องการให้ข้อผิดพลาด ทั้งหมด เนื่องจากข้อผิดพลาดแรกสามารถทริกเกอร์ได้ ส่วนที่เหลือ. ในกรณีนี้ ดูเหมือนว่าข้อผิดพลาดได้รับมาอย่างไม่เป็นระเบียบ หรืออย่างน้อยก็อยู่ในลำดับที่ไม่คาดคิด ฉันถือว่าคอมไพเลอร์จะพบข้อผิดพลาด ‘doesntexist’ was not declared ก่อน

person jozxyqk    schedule 16.11.2013

ไม่ใช่ปัญหาอย่างแน่นอนกับฟังก์ชันที่เป็นประเภท void อาจเป็นสคีมาข้อความแสดงข้อผิดพลาดที่ไม่ดีของคอมไพเลอร์ g++ เมื่อพารามิเตอร์ฟังก์ชันประกอบด้วยประเภทที่ไม่รู้จัก

person Sunil Bojanapally    schedule 13.11.2013

สวัสดี @jozxyqk คุณต้องระบุประเภทของอาร์กิวเมนต์ หากสิ่งที่คุณมีใน Coliru เป็นตัวแทนของรหัสของคุณอย่างถูกต้อง สิ่งที่คุณต้องทำคือระบุประเภทข้อมูลที่ถูกต้องสำหรับอาร์กิวเมนต์ เช่น void myfunc(string argument) หรือ void myfunc(int argument) เป็นต้น

มีทรัพยากรที่เหมาะสมเกี่ยวกับประเภทข้อมูลที่นี่ และอีกที่นี่ มันอาจจะคุ้มค่าที่จะทำการค้นหา Google สำหรับ วิธีใช้ประเภทข้อมูลใน c++ หรือคล้ายกัน เพื่อให้คุณสามารถค้นหาสื่อการอ่านเกี่ยวกับประเภทข้อมูลและการใช้งานได้

Linked here เป็นเวอร์ชันแก้ไขซึ่งแสดงสตริงเป็นประเภทข้อมูลที่ถูกต้องสำหรับอาร์กิวเมนต์และ เวอร์ชันโอเวอร์โหลดสำหรับอาร์กิวเมนต์ int

แจ้งให้เราทราบหากคุณต้องการข้อมูลเพิ่มเติม :)

person GMasucci    schedule 13.11.2013