2013-01-22 25 views
6

Tôi có một dự án C++ trong VS2010 với Qt 4.7.4 và tôi thường gặp vấn đề với IntelliSense (như tất cả chúng ta đều làm ...). Một vấn đề cụ thể là đôi khi không thể tìm thấy phần thân hàm (trong tệp .cpp). Nếu tôi nhấp vào nội dung hàm đó, hộp thả xuống (thường hiển thị hàm bạn đang ở) trống.Tại sao có thể phá vỡ vi phạm VS2010 của Q_FOREACH?

Hôm nay tôi nhận thấy hành vi này ngay sau khi tôi thêm câu lệnh foreach() (Qt macro Q_FOREACH). Sau đó, tôi thay thế macro foreach() bằng một số tương ứng for(int i = 0; i < ...) và IntelliSense ngay lập tức hiển thị lại chức năng.

Vì vậy, tôi muốn biết:

  1. ai đó có thể vui lòng xác minh hành vi này và cho tôi biết như vậy trong một bình luận?
  2. Tại sao điều này xảy ra?
  3. Có cách giải quyết nào cho phép tôi tiếp tục sử dụng Q_FOREACH không?
+1

tôi không thể xác minh nó như tôi chỉ có Năm 2008 và Intellisense bị choáng ngợp bởi dự án khá lớn của chúng tôi vì nó có rất nhiều vấn đề khó mà làm cho nó hoạt động được chút nào. Nhưng đây là những gì tôi đang làm: Tôi * phát triển * trong Qt Creator và * biên dịch và gỡ lỗi * trong Visual Studio. Điều này xuất hiện như là sự kết hợp tốt nhất của hai thế giới đối với tôi. Rõ ràng bạn cần quản lý các dự án trong '.pro' tập tin và chuyển đổi chúng bằng cách sử dụng 'qmake -tp vc -recursive .pro' hoặc một studio trực quan thêm vào –

+0

những gì sẽ xảy ra khi bạn thay thế' foreach() 'bởi' Q_FOREACH' và chỉ định 'CONFIG + = no_keywords' ?? – UmNyobe

+0

@UmNyobe Tôi đã thử thay thế 'foreach()' bằng 'Q_FOREACH' mà không có hiệu lực. Tôi sợ tôi không biết cách thêm 'no_keywords', bởi vì trong VS2010 không có tệp' .pro'. Bạn có biết đó là trường tương ứng trong các trang thuộc tính của dự án không? Tuy nhiên, 'no_keywords' có nghĩa là tôi phải thay thế tất cả' signal' bằng 'Q_SIGNAL' - đây là cách cồng kềnh hơn viết lại tất cả foreachs(). –

Trả lời

8

Bạn phải sử dụng khái niệm tệp 'cpp.hint'. Về cơ bản, bạn phải đặt các macro phiền hà vào một tệp có tên 'cpp.hint' và đặt tệp đó vào thư mục giải pháp của bạn (không hoạt động cho tôi - bố cục dự án không chuẩn) hoặc trong bố mẹ- . thư mục nơi các tập tin mã của bạn cư trú tại (làm việc cho tôi)

trong tập tin mà bạn chỉ cần đặt các macro phiền KHÔNG bên phải phía, vì vậy trong trường hợp của bạn:

#define foreach() 

hoặc có thể tốt hơn

#define Q_FOREACH(variable, container) 
#define foreach(...) 
etc. 

LƯU Ý, bạn có thể phải ReScan hoặc Khởi động lại hoặc fiddle xung quanh với một chức năng cho các hiệu ứng để thiết lập trong sau khi đặt định nghĩa trong tập tin cpp.hint.

CẬP NHẬT: Thật vậy, tôi vừa phát hiện ra rằng tôi phải thực hiện một số thay đổi đối với tệp .cpp (ví dụ: thêm dòng mới) để có hiệu lực. Hãy sửa lỗi không được áp dụng tự động.

Các liên kết ban đầu là: http://msdn.microsoft.com/en-us/library/dd997977.aspx

Lý do cho những rắc rối là hiệu suất Intellisense sẽ (khả năng) giảm đáng kể nếu nó đã phải phân tích tất cả các macro trong một dự án, vì vậy nó chỉ phân tích những trao một cách rõ ràng trong ' cpp.hint '.

Văn bản gốc microsoft cho biết bạn có thể sử dụng bất kỳ thư mục nào trong "Đường dẫn từ thư mục gốc của tệp nguồn đến thư mục chứa tệp nguồn. Trong dự án Visual C++ điển hình, thư mục gốc chứa giải pháp hoặc tệp dự án. "

Bạn có thể tìm thấy các tập tin 'cpp.hint' chính tại 'C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ vcpackages' để tham khảo

+0

Điều này là hoàn toàn chính xác. –

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