2013-07-23 36 views
18

Khi bước qua đoạn code mẫu sau trong Visual Studio 2012:Vector 'không khai thác '[]' phù hợp với các toán hạng' lỗi trong Visual Studio xem

std::vector<int> test; 
test.resize(1); 
test[0] = 4; 

tôi có thể thiết lập một chiếc đồng hồ trên thử nghiệm và kiểm tra 0 của nó thành phần. Tuy nhiên, nếu tôi đặt một chiếc đồng hồ trên thử nghiệm [0], tôi nhận được lỗi 'không khai thác '[]' phù hợp với các toán hạng':

enter image description here

Làm thế nào tôi có thể kiểm tra giá trị của thử nghiệm [0] trực tiếp ?

+0

Bạn đã biên soạn trong chế độ Release hoặc gỡ lỗi? –

+0

Gỡ lỗi, câu hỏi hay. –

+0

Lưu ý rằng các trình vòng lặp và tham chiếu thường bị vô hiệu khi bạn gọi 'resize'. –

Trả lời

39

Tôi đã tìm thấy một giải pháp không phụ thuộc vào nội bộ của lớp học. Hình thức mở rộng của cuộc gọi nhà điều hành dường như làm việc cho tôi. Trong trường hợp này đó là đoạn mã sau:

v.operator[](0) 

Tôi đã thử nghiệm nó trong Visual C++ 2012.

2

Visual Studio không hỗ trợ quá trình nạp chồng của toán tử stl [], bạn chỉ cần đặt đồng hồ theo cách thủ công trên phần tử bạn quan tâm bằng cách chọn nó từ danh sách trong khi gỡ lỗi.

EDIT: nếu bạn muốn kiểm tra một đối tượng T bên trong một vector, gán nó vào một đối tượng T và thiết lập một chiếc đồng hồ trên đó thay vì

+0

Điều gì xảy ra nếu vectơ có 10000 phần tử và bạn muốn xem phần tử 5000? Có cách nào thuận tiện để làm điều đó không? –

+0

tiếc là tôi e rằng bạn sẽ phải thực hiện thủ công lần đầu tiên. – mewa

+0

Về chỉnh sửa của bạn: đó không phải là một tùy chọn nếu bạn đang bước qua một DLL. Bạn sẽ làm gì trong kịch bản đó? –

7

Như @NateKohl lưu ý, trong Visual Studio 2012 (và các phiên bản có thể trước đó như tốt) v._Myfirst cung cấp một con trỏ tới dữ liệu vectơ bên dưới, cho phép bạn xem vectơ như thể nó là một mảng.

0

nếu bạn sử dụng 2D vecotr < vector < string>> dp, và bạn muốn để có được dp [i ] [j] trong cửa sổ xem trong VS2013, bạn có thể sử dụng (dp.operator [] (i)). operator [] (j)

vector < vector < string>> dp (n, vector < chuỗi > (n, ""));

(dp.operator [] (i)). Operator [] (j)

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