2009-08-26 17 views
10

Gần đây, tôi đã nhận được tệp kết xuất sự cố từ một khách hàng. Tôi có thể theo dõi vấn đề xuống một lớp có thể chứa dữ liệu không chính xác, nhưng tôi chỉ có một con trỏ void đến lớp, không phải là một con trỏ thực (con trỏ void đến từ một thuộc tính window, do đó nó là một con trỏ void) . Thật không may, lớp mà tôi muốn để cast con trỏ đến, là trong một không gian tên vô danh, như thế này:Gỡ lỗi dữ liệu trong 'các không gian tên ẩn danh' (C++)

namespace 
    { 
    class MyClass 
     { 
     ... 
     }; 
    } 

... 
void *ptr = ... 
// I know ptr points to an instance of MyClass, 
// and at this location I want to cast ptr to (MyClass *) in the debugger. 

Sử dụng "ptr" trong cửa sổ xem nếu Visual Studio 2005 chỉ cho thấy giá trị con trỏ. Nếu tôi sử dụng "(MyClass *) ptr", trình gỡ lỗi cho tôi biết nó không thể truyền cho nó.

Làm cách nào để truyền ptr tới con trỏ MyClass? Lưu ý: Cuối cùng tôi có thể sử dụng không gian tên ngớ ngẩn (như tên của tệp nguồn), và sau đó sử dụng "không gian tên đang sử dụng", nhưng tôi mong đợi các giải pháp tốt hơn.

+1

Btw, VS 2008 trưng bày cùng một vấn đề. Tôi muốn khuyên bạn nên gửi cho MS một lưu ý. – gimpf

Trả lời

8

Điều này được đề cập trong MSDN. Nó không giống như có một giải pháp tốt đẹp trong cửa sổ Watch (bạn có thể nhận được tên trang trí của lớp học của bạn từ một danh sách tôi đoán).

Ý tưởng "không gian tên ngớ ngẩn" của bạn sẽ hoạt động tốt, bạn cũng có thể chỉ khai báo một lớp giống hệt với tên ngớ ngẩn và truyền cho loại đó thay thế.

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