Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khắc Phục Lỗi Biên Dịch C++ 'No Matching Function for Call'

Khắc Phục Lỗi Biên Dịch C++  No Matching Function for Call

Lỗi "No matching function for call" (Không có hàm khớp cho lời gọi) nghĩa là khi chúng ta gọi một hàm nhất định, nhưng định danh (id) của hàm đó không khớp với đối số của hàm được định nghĩa. Do đó ta nhận được lỗi 'no matching function for a call' trong C++. Khi trình biên dịch nói không có phương thức khớp, nó thường cho thấy trình biên dịch đã xác định một phương thức cùng tên như chúng ta đã đưa tham số cho hàm.

Vì vậy khi chúng ta tiếp tục truyền phương thức chỉ định của kiểu sai hoặc tập tham số không phù hợp cho hàm. Định nghĩa hàm chỉ định tên phương thức cho trình biên dịch cũng như cách gọi nó. Toàn bộ nội dung hàm được khai báo rõ ràng. Trong bài viết này, chúng ta sẽ nói về cách lỗi ‘No matching function for a call’ xuất hiện trong C++.

Sử Dụng Đối Tượng Của Lớp (Class)

Trong kịch bản này, tham số hàm không khớp khi gọi, vì vậy chúng ta sẽ thử truyền con trỏ nơi cần tham chiếu và dùng kiểu tham chiếu lớp khác nhau trong lời gọi hàm. Bất cứ khi nào chúng ta gọi hàm nhưng định nghĩa hàm của đối số không khớp, thì lỗi ‘No matching function for call to C++’ được ném ra.

Bây giờ chúng ta phải khắc phục lỗi; cho mục đích này, chúng ta chỉ cung cấp tham số khớp phù hợp khi định nghĩa hàm. Mã cùng với mô tả chi tiết có thể thấy bên dưới.

Khắc Phục Lỗi Biên Dịch C++  No Matching Function for Call

Ở đầu mã, chúng ta bao gồm thư viện <iostream>, dùng cho chức năng nhập và xuất. Chúng ta cũng dùng namespace chuẩn. Sau đó khởi tạo class tên ‘A’, chỉ định hàm setValue() là public. Chúng ta truyền tham số value với kiểu dữ liệu integer cho hàm này. Chúng ta cũng khởi tạo biến ‘value’ của class có kiểu integer.

Dòng tiếp theo, gọi hàm setValue() khác. Phương thức này giữ biến ‘value’ làm đối số. Chúng ta tăng giá trị value được truyền làm đối số. Sau đó gọi hàm main(), đưa ‘argc’ kiểu integer và ‘argv’ con trỏ kiểu character làm đối số. ‘argc’ là số tham số được cung cấp trong mã từ hệ điều hành. ‘argv’ là tập hợp tham số.

Bây giờ tạo đối tượng ‘obj’ của class ‘A’. Gọi phương thức setValue() hàm. ‘obj’ được truyền làm đối số. Nhưng chúng ta không kết nối đối tượng với class. Đó là lý do khi gọi hàm setValue(), nó trả về lỗi vì chúng ta không có class đó nơi gọi setValue(). Trong mã trên, chúng ta truyền đối tượng class trong đối số gọi setValue(), nhưng nếu kiểm tra định nghĩa setValue(), chúng ta giả định đối số truyền là integer. Để kết thúc mã, dùng lệnh ‘return 0’. Ở đây có thể kiểm tra đầu ra của mã trên.

Khắc Phục Lỗi Biên Dịch C++  No Matching Function for Call

Chúng ta nhận được lỗi ‘no matching function for call to A’ sau khi chạy mã trên.

Cách Khắc Phục Lỗi Này?

Để khắc phục lỗi này khi gọi phương thức, chúng ta phải cung cấp tham số tương ứng phù hợp cho hàm. Cách khác khắc phục lỗi này là tạo các hàm nạp chồng (overloaded) khác nhau với tham số khác nhau. Ở đây chúng ta chỉ sửa đổi đối số của hàm main(). Như vậy lỗi ‘no matching function for the call’ to C++ sẽ bị loại bỏ. Mã cùng với mô tả chi tiết có thể thấy bên dưới.

Khắc Phục Lỗi Biên Dịch C++  No Matching Function for Call

Sau khi dùng namespace chuẩn, giới thiệu file header <iostream>. Xây dựng class tên ‘A’ và làm hàm setValue() public. Hàm này nhận biến ‘value’ làm tham số, kiểu integer. Chúng ta cũng khởi tạo biến ‘value’ kiểu integer trong class. Biến này cũng đặt public. Dòng tiếp theo gọi hàm setValue() khác. Biến ‘value’ kiểu integer được cung cấp làm tham số. Chúng ta tăng giá trị được cung cấp làm một trong các đầu vào.

Bước tiếp theo, gọi phương thức main(). Bên trong hàm main(), cung cấp ‘argc’ kiểu integer và ‘argv’ kiểu character làm đối số. ‘argc’ cho thấy số tham số hệ điều hành cung cấp trong chương trình. ‘argv’ là tập hợp tham số. Bây giờ tạo đối tượng của class ‘A’ tên ‘obj’. Khởi tạo biến ‘value’ kiểu integer. Dùng phương thức setValue() của đối tượng và đặt ‘value’ làm tham số của hàm này.

Cuối cùng, thêm ‘return 0’ để đóng chương trình. Nhớ rằng chúng ta phải nhập cùng kiểu dữ liệu của hàm và đối số trong hàm main(). Sau đó truyền hàm đó cho đối tượng và trả về. Ở đây có thể kiểm tra đầu ra của mã trên.

Khắc Phục Lỗi Biên Dịch C++  No Matching Function for Call

Kết Luận

Trong bài viết này, chúng ta đã khám phá nguyên nhân nhận được lỗi ‘no matching function for a call’ và cách khắc phục. Bất cứ khi nào nhận được lỗi này, chúng ta phải kiểm tra tham số của các phương thức yêu cầu cũng như kiểu dữ liệu của chúng. Chúng ta mắc lỗi khi cung cấp đối số cho tham số hàm. Chúng ta không khớp tham số cho hàm. Chúng ta có thể cần đưa tham số khớp cho phương thức chỉ định. Hoặc phải thêm hàm mới cùng kiểu dữ liệu. Sau khi kiểm tra và thêm tham số phù hợp cho hàm trong chương trình, lỗi ‘no matching function for a call’ sẽ được khắc phục.

Về tác giả

Khắc Phục Lỗi Biên Dịch C++  No Matching Function for Call

Kalsoom Bibi

Xin chào, tôi là nhà văn tự do và thường viết cho nội dung liên quan đến Linux và công nghệ khác.