Được rồi, tôi đang cố gắng tạo một lớp học nhanh để làm việc như một loại bảng băm. Nếu tôi có thể làm cho nó hoạt động thì tôi có thể làm điều này:toán tử [] = quá tải?
StringHash* hash = new StringHash;
hash["test"] = "This is a test";
printf(hash["test"]);
Và nó sẽ in ra "Đây là một thử nghiệm".
Có vẻ như tôi có 2 vấn đề tại thời điểm này. Thứ nhất tôi đã làm điều này:
const char* operator[](const char* key) {
for(int i = 0; i < hashSize; ++i) {
if(strcmp(hkeys[i], key) == 0) {return values[i];}
}
return NULL;
}
Nhưng khi tôi cố gắng tìm kiếm một giá trị trình biên dịch phàn nàn rằng
lỗi: không hợp lệ loại 'StringHash * [const char [5]]' cho mảng subscript
Toán tử thứ hai [] = không xuất hiện đúng cú pháp ở đây. Điều duy nhất tôi có thể tìm thấy là & operator [] nhưng tôi không nghĩ rằng sẽ làm việc kể từ khi tôi phải mã thủ tục tra cứu ??? (Không phải cú pháp đó vừa được sử dụng để trả lại một tham chiếu mục mảng?)
Là những gì tôi đang cố gắng làm ở đây thậm chí có thể? Bất kỳ lời khuyên nào được đánh giá cao. :)
Dường như có sự nhầm lẫn về những gì tôi đang cố gắng thực hiện. Tôi sẽ gửi mã của tôi:
sản phẩm hoàn thành sau khi tất cả sự giúp đỡ:
Hmm ... Tôi nghĩ rằng tôi hiểu những gì bạn đang nói. Bạn muốn tôi viết một lớp với toán tử =() và sau đó có xử lý đó thêm mục nhập vào bảng, vâng? Tôi có thể thấy rằng làm việc. Điều mà tôi lo lắng, tôi sẽ không phải lưu trữ một mảng khác trong nội bộ mà sẽ giữ một thể hiện của lớp đó cho mọi ... Ah, không chờ đợi. Tôi chỉ có thể sử dụng những đối tượng như các giá trị nội bộ thay vì const char * và sau đó có họ trả về chuỗi trên tra cứu. Hiểu rồi. :) – Khat
Chụp. Nó sẽ không cho phép tôi làm theo cách này. Nó tiếp tục cố gắng trả lại vật thể ma thuật thay vì dây cstring. – Khat
Bạn có thể xác định chuyển đổi tiềm ẩn giữa loại "ma thuật" và 'const char *'. Tuy nhiên, việc sử dụng 'std :: strings' là một giải pháp mạnh mẽ hơn. –