30/09/2018, 18:37

Lỗi linker (LNK2019) trong khai báo class

Chào mọi người, mình đang code bài quản lí sinh viên thì bị lỗi linker này, khó hiểu ở chỗ là ở project khác trong solution mình code y chang vậy, chỉ thay đổi các tên biến lại, nó không lỗi.
Ai có nhiều kinh nghiệm xử lí lỗi này thì xin chỉ giáo, mình dùng VS2013

Do code hơi dài (thực ra mình lược bớt rồi) nên xin được post code lên codepad cho dễ nhìn:
File .h: http://codepad.org/Tq41p2xq
File .cpp: http://codepad.org/9SWbTiWW

Lỗi linker 2019 nó báo ở 2 hàm trong phần protected.

Minh Hoàng viết 20:46 ngày 30/09/2018

khó hiểu ở chỗ là ở project khác trong solution mình code y chang vậy, chỉ thay đổi các tên biến lại, nó không lỗi.

có thể là do việc copy file, quăng vào project nhưng quên không add file vào IDE?

Ha Gia Phat viết 20:42 ngày 30/09/2018

không, tui tạo class dùng class wizard xong rồi copy từ file bên kia rồi sửa lại tên biến các kiểu

... viết 20:38 ngày 30/09/2018
//ouput, input
	friend std::ostream& operator<<(std::ostream& os, const Daihoc& obj);
	friend std::istream& operator>>(std::istream& is, Daihoc& obj);

Bạn dùng từ khóa friend mà có thấy hàm

std::ostream& operator<<(std::ostream& os, const Daihoc& obj);

hay

std::istream& operator>>(std::istream& is, Daihoc& obj);

nào ở bên ngoài class trong file .h đâu

Minh Hoàng viết 20:39 ngày 30/09/2018

trong file .cpp có một đoạn

std::ostream& operator<<(std::ostream& os, const Daihoc& obj)
{
	return obj.print(os);
}
std::istream& operator>>(std::istream& is, Daihoc& obj)
{
	int size1 = 0, size2 = 0;
	std::cout << "Nhap so luong SV CNTN: ";
	is >> size1;
	std::cout << "\nNhap so luong SV CTTT: ";
	is >> size2;
	std::cout << std::endl;
	return obj.input(is, size1, size2);
}
... viết 20:43 ngày 30/09/2018

Đó là phần định nghĩa hàm friend rồi, còn khai báo hàm friend đặt ở đâu ko thấy.

Ha Gia Phat viết 20:37 ngày 30/09/2018

cảm ơn mọi người, mình sửa được rồi lỗi này do bất cẩn, quên cho định nghĩa 1 operator>> << cho class SVTT

Minh Hoàng viết 20:47 ngày 30/09/2018
//ouput, input
	friend std::ostream& operator<<(std::ostream& os, const Daihoc& obj);
	friend std::istream& operator>>(std::istream& is, Daihoc& obj);

đoạn này trong .h gọi là gì vậy anh? Khai báo?

... viết 20:41 ngày 30/09/2018

Theo mình hiểu thì phải có đối tượng trước thì mới có quan hệ bạn bè.
Đặt hàm

friend std::ostream& operator<<(std::ostream& os, const Daihoc& obj);

trong class thì bên ngoài class ít ra cũng phải có khai báo

std::ostream& operator<<(std::ostream& os, const Daihoc& obj);

Mình ko biết chắc vì trước giờ mình chỉ dùng cách này thôi. Nếu cách trên dùng bình thường thì cứ dùng thôi chứ ko cần phải làm theo mình.

Bài liên quan
0