01/10/2018, 00:19

Lỗi trả về trong visual

bool intset::equal(intset &n){
	if(card!=n.card) return false;
	for(int i=0; i<card; i++)
	if(!n.member(elems[i])) return false;
	else return true;
}

Cho mình hỏi vì sao chương trình này chạy trong dev c thì bình thường mà sao dùng trong visual lại bị lỗi : warning C4715: ‘intset::member’ : not all control paths return a value

Mai Anh Dũng viết 02:35 ngày 01/10/2018

Tại vì Dev-C kiểm tra không kỹ. Với lại đừng code như thế, khó đọc lắm. Tiết kiệm vài cái xuống hàng không làm cho code chạy nhanh hơn hay trông pro hơn tí nào. Nó chỉ làm cho code xấu, người code “gà” hơn hẳn.

Code gốc sau khi sửa nó sẽ như thế này.

bool intset::equal(intset &n){
	if(card!=n.card)
		return false;
	for(int i=0; i<card; i++)
		if(!n.member(elems[i]))
			return false;
		else
			return true;
}

Visual Studio nó báo là bởi vì nó thấy ở đây có khả năng không có return nào được gọi.

Thêm một dòng return ở cuối hàm sẽ hết bị báo lỗi

bool intset::equal(intset &n){
	if(card!=n.card)
		return false;
	for(int i=0; i<card; i++) {
		if(!n.member(elems[i]))
			return false;
		else
			return true;
	}

	return false;
}

Có điều code này sai về mặt logic mất tiêu rồi. Vòng for chỉ chạy đúng một lần rồi return true hoặc false.

Gia Huy Nguyễn viết 02:20 ngày 01/10/2018

Mình dùng hàm này trong khai báo lớp tập hơp số nguyên IntSet để kiểm tra xem 2 lớp có bằng nhau không

bool IntSet::Member(const int elem) { 
	for (int i = 0; i < card; ++i) 
	     if (elems[i] == elem) 
                         return true; 
	     return false;
}

Hàm Member là để kiểm tra xem elem có thuộc tập hợp hay không

Bài liên quan
0