2012-10-31 32 views
6

Tôi đang sử dụng Eclipse Juno với CDT để phát triển dự án C++ của mình với tệp tùy chỉnh. Tôi cũng đang sử dụng các tính năng C++ 11, mà tôi đã làm việc với trình phân tích cú pháp của Eclipse theo lời khuyên ở đây trên SO.Eclipse CDT không thể phân tích cú pháp các phương thức trên các phần tử trong các thùng chứa STL

Vấn đề là Eclipse không thể phân tích cú pháp các phương thức hoặc trường được truy cập trên các phần tử vùng chứa STL. Ví dụ như:

mainapp.h

typedef struct _PlayerCalibrationData { 
    [...] 
    std::string getSamplesStr() 
    { 
      [...] 
    } 
} PlayerCalibrationData; 

std::vector<MainApp::PlayerCalibrationData> m_calibrationData; 

mainapp.cpp

m_calibrationData[0].getSamplesStr(); 

getSamplesStr() sẽ được gạch chân và đánh dấu là một lỗi với thông báo "Cách 'getSamplesStr' could không được giải quyết".

Trình biên dịch không phàn nàn, tuy nhiên, bất kể tôi có gọi nó từ Eclipse hay từ dòng lệnh.

Ngoài ra, khi tôi gõ m_calibrationData., tất cả các phương pháp vector bật lên qua nội dung hỗ trợ (tức là nó không phải là một vấn đề của Eclipse không tìm vector bao gồm), nhưng ngay sau khi tôi truy cập vào một yếu tố qua [] hoặc at(), nội dung hỗ trợ là yên tĩnh và mọi thứ được nhập theo cách thủ công đều được đánh dấu là lỗi.

Việc bình thường không hoạt động bình thường? Nếu có, có cách nào tôi có thể tắt hỗ trợ/chỉnh sửa cho các vùng chứa dựa trên mẫu không?

EDIT

bây giờ tôi cũng đã cố gắng vô hiệu hóa C++ 11 hỗ trợ, và nếu tôi làm điều đó vấn đề sẽ biến mất - nhưng sau đó tất nhiên là C++ 11 loại và cú pháp không được công nhận.

EDIT 2

tôi nhập khẩu một Dự án thứ hai, được nhập chính xác các thiết lập tương tự, và cho Dự án nay các công trình phân tích cú pháp. Sự khác biệt duy nhất là bố cục dự án (vị trí khác nhau của makefiles). Nhưng ngay cả khi tôi xóa và nhập lại dự án đầu tiên, nó vẫn không hoạt động.

+1

Vấn đề rất có thể giống với [this] (https://bugs.kde.org/show_bug.cgi?id=299124), mặc dù đó không phải là nhật thực. Tôi muốn đăng một lỗi cho cdt –

+1

Có vẻ như CDT không phân tích cú pháp giá trị trả về của 'toán tử []' cho 'std :: vector'. Bạn cũng có các lỗi như "Đối số không hợp lệ" cho các câu lệnh như 'foo.push_back (m_calibrationData [0])'? Xem [lỗi này] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=349849) –

Trả lời

5

này làm việc cho tôi:

"tên dự án của bạn" -> nhấp chuột phải -> properties:

C/C++ General -> Preprocessor Bao gồm Paths, Macros, vv-> chuyển sang tab có tên là "Nhà cung cấp":

  • cho "Cấu hình" chọn "Release" (và sau đó "gỡ rối")

  • công tắc tắt tất cả các nhà cung cấp và chỉ cần chọn "CDT GCC Built- trong trình biên dịch Settings"

  • bỏ chọn "Chia sẻ mục thiết lập giữa những dự án (nhà cung cấp toàn cầu)"

  • trong "Command để có được thông số kỹ thuật biên dịch:" add "-std = C++ 11" mà không có dấu ngoặc kép (cũng có thể làm việc với dấu ngoặc kép)

  • hit áp dụng và đóng các tùy chọn

  • xây dựng lại các chỉ số

làm việc này cho tôi trên cả hai mashines, tại nhà và tại nơi làm việc x64 win7, nhật thực toàn phần chính mới nhất với CDT mingw-w64 gcc 4.7.2 từ dự án mingwbuilds trên sourceforge

+0

Nghe hay nhưng không hiệu quả đối với tôi. Tôi vô hiệu hóa tất cả các nhà xây dựng để giải quyết một vấn đề vòng lặp xây dựng lại vô hạn trước đó. – Eric

+0

Ugg, ok của nó ngay bây giờ, vì vậy có một cái gì đó trong câu trả lời này sau khi tất cả =) – Eric

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