error 035: argument type mismatch (argument 2)

เมื่อได้เขียนโปรแกรมไม่ว่าจะภาษาไหน อย่างน้อยก็ควรลองอ่าน Error หรือข้อความที่ได้จากการ Execute/Compile บ้าง แม้ว่าตัวเองจะไม่รู้ภาษาสักเท่าไหร่ก็ตาม อย่างในหัวข้อเราก็ต้องทำความรู้จักกับศัพท์แต่ละตัว อย่าง argument ศัพท์เฉพาะจาก Error นี้ มันคืออะไร ?

เวลาเราเรียกใช้ฟังก์ชั่นเช่น SetPlayerMoney(playerid, 5000);

ตัวหนังสือสี แดง นี่แหละครับคือ argument ซึ่งแต่ละตัวจะถูกคั่นด้วย “,” นั้นหมายถึงฟังก์ชั่นนั้นต้องมีจำนวน parameter ที่รอรับไม่น้อยกว่า argument ที่ส่งไป มันถูกเรียกต่างออกไปเพียงเพราะมันอยู่คู่กับฟังก์ชั่นที่ประกาศไว้ และมีชื่อเรียกว่า parameter ดังเช่น

public SetPlayerMoney(playerid, money) { }

พอเข้าใจดังนี้แล้ว เรามาลองอ่าน Error กันดูบ้าง argument type mismatch (..) ประมาณว่า ประเภทอาร์กิวเมนต์ไม่ตรงกัน แล้วอะไรคืออาร์กิวเมนต์เรารู้แล้วใช่ไหม? ก็คือค่าที่ส่งไปในฟังก์ชั่น อ้าวแล้วทีนี้ประเภทอาร์กิวเมนต์มันคืออะไร? ประเภทในที่นี้เป็นไปอย่างอื่นไม่ได้เลยก็คือประเภทตัวแปรจำพวก int, string, boolean เราประกาศฟังก์ชั่น SetPlayerMoney ให้ parameter ชื่อ money รับค่าที่เป็นเลขจำนวนเต็มเท่านั้น แต่ถ้าเราเรียกใช้ลักษณะนี้

SetPlayerMoney(playerid, “5000”);

มันจะจึงเกิด Error ดังหัวข้อเรื่องของเรา แต่ถ้าเราต้องการส่งและรับค่าที่เป็น string หรือข้อความใดๆ ให้เติม Bracket [] เข้าไปเพื่อกำหนดประเภทของ argument ให้เป็น string เช่น 

Public SetPlayerMoney(playerid, money[]) { }

ประเภทตัวแปรต่างๆ

int จะใช้ money (เลขจำนวนเต็มเช่น -1, 20, 50)
boolean จะใช้ bool:money (ข้อมูลที่เป็นตรรกจริงเท็จเช่น true, false, 0, 1)
string จะใช้ money[] (ข้อมูลที่เป็นข้อความหรืออาเรย์เช่น “hello”, “world”)
float จะใช้ float:money (เลขที่มีทศนิยมเช่น 5.45, 1.05)

ผู้เขียน: srysgag

Just learn & practice

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *