2011-12-07 16 views
5

Dưới đây là mã của tôi:"kiểm soát đạt hết chức năng không trống" cảnh báo trong eclipse C++ nhưng không có lỗi compile- hoặc thời gian chạy

Composer& Database::GetComposer (string in_last_name) 
{ 
    for (int i = 0; i < next_slot_; i++) 
    { 
     if (composers_[i].last_name() == in_last_name) 
      return composers_[i]; 
    } 
} 

Ý tưởng là để lặp qua một mảng của các đối tượng Composer và trở lại tham chiếu đến đối tượng có trường last_name khớp với "in_last_name". Tôi hiểu những gì cảnh báo nói với tôi, cụ thể là có thể chức năng sẽ không trả lại bất cứ điều gì (nếu, nói, người dùng cung cấp họ không hợp lệ). Câu hỏi của tôi là, làm thế nào tôi có thể tránh điều này? Tôi đã thử thêm "return 0" và "return NULL" sau vòng lặp for và nó sẽ không biên dịch. Phương pháp này có nên ném một ngoại lệ nếu nó không tìm thấy gì?

+1

Bạn nên ném một ngoại lệ. –

+1

Cảnh báo là các lỗi thực sự hợp lý trong mã của bạn. Sửa tất cả các cảnh báo (và bật lên mức cảnh báo đến mức cao (hợp lý) có thể) –

+0

Tôi vẫn nhận được cảnh báo tương tự ngay cả với khối try/catch ném một ngoại lệ chuẩn. – wbr

Trả lời

6

Chức năng của bạn được khai báo trả về Composer&, tức là tham chiếu đến Composer. Nếu hàm của bạn không trả về một tham chiếu thích hợp, và người gọi cố gắng sử dụng giá trị trả về cho một cái gì đó, hành vi không xác định sẽ dẫn đến.

Nếu chức năng của bạn có thể không hợp pháp để tìm thấy những gì nó đang tìm kiếm, bạn có thể muốn thay đổi kiểu trả về thành con trỏ thay vì tham chiếu . Điều đó sẽ cung cấp cho bạn tùy chọn để trở NULL:

Composer* Database::GetComposer (string in_last_name) 
{ 
    for (int i = 0; i < next_slot_; i++) 
    { 
     if (composers_[i].last_name() == in_last_name) 
      return &composers_[i]; 
    } 
    return NULL; 
} 

Ngoài ra, bạn có thể ném một ngoại lệ khi chức năng của bạn thất bại trong việc tìm ra mục tiêu.

+0

Khi tôi làm điều đó, tôi nhận được thông báo lỗi sau: "khởi tạo không hợp lệ tham chiếu không const của loại 'Composer &' từ một rvalue loại 'int'" – wbr

+0

Trên dòng nguồn nào bạn nhận được lỗi đó? –

+0

Trên cùng dòng với câu lệnh NULL trả về. – wbr

Các vấn đề liên quan