2010-04-08 34 views
8

Tôi có thể là một vấn đề đơn giản, nhưng không có lỗi hoặc cảnh báo thông tin nào trong quá trình biên dịch để cảnh báo tôi về những gì đang xảy ra.Biểu tượng Không tìm thấy, được mong đợi trong Không gian Phẳng ObjC++

Tôi có ứng dụng Objective-C++ bao gồm tệp tiêu đề chính C++ và ObjC.

Nó xây dựng tốt, nhưng khi chạy, nó mang lại cho thông báo lỗi này:

Dyld Error Message: 
    Symbol not found: _OBJC_CLASS_$_AppController 
    Referenced from: /Users/slate/Documents/osirixplugins/eqOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirix 
    Expected in: flat namespace 
in /Users/slate/Documents/osirixplugins/eqOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirix 

Không có số lượng googling đã dẫn đến một giải pháp, và tôi chắc chắn Tôi vừa bỏ lỡ một bộ sưu tập hoặc xây dựng tùy chọn một vài nơi.

"AppController.h" được bao gồm trong mục tiêu (đã chọn) và #import 'd trong Tệp lớp ObjC.

Bất kỳ trợ giúp nào được đánh giá cao.

ObjC++ liên tục làm tôi đau đầu.

Xin cảm ơn,

-S!

Trả lời

5

Rõ ràng lớp AppController bị thiếu. Lớp AppController có được định nghĩa trong một khung thư viện động không? Nếu vậy, khi bạn chạy ứng dụng, nó có biết nơi để tìm các thư viện/khung công tác không?

Đây là vấn đề liên kết, nhân tiện. Các tệp tiêu đề không liên quan. Đó là các tệp .m hoặc .mm bạn cần xem xét.

+1

Có, thực sự, đó là một vấn đề không gian tên trong tệp .m bao gồm AppController.h khiến nó không ở dạng nhị phân. GCC đã không có lỗi mặc dù, vì vậy tôi không có ý tưởng gì là sai. Cảm ơn. –

1

Không chắc chắn đây có phải là vấn đề của bạn hay không, nhưng tôi đã gặp sự cố tương tự với một dll C++, điều này khiến tôi mất cả ngày để gỡ lỗi. Tôi đã không được lập trình trong C++ trong khoảng 15 năm, và trong khi cố gắng viết một hàm ảo thuần túy, tôi đã sử dụng cú pháp quen thuộc "virtual void f();" - oops. Trong C++, nó phải là "virtual void f() == 0;" Phiên bản gcc mới nhất trên mac OSX 10.9.2 vui vẻ biên dịch mã.

Tôi nghĩ đó là một tuyên bố hoàn toàn hợp pháp ... tuy nhiên, không chắc liệu C++ có cho phép các lớp mở rộng nhiều tệp hay không, vì vậy có vẻ như nó sẽ bị gắn cờ (vì không có triển khai nào được cung cấp trong tệp CXX.) bất kỳ sự kiện nào, biểu tượng biến nó thành mã đối tượng và trình liên kết không bao giờ phàn nàn, vì vậy bạn kết thúc với tham chiếu còn thiếu. Hy vọng điều này sẽ giúp một ai đó.

+0

Điều này chắc chắn đã giúp tôi. Cảm ơn gợi ý. Tôi quên thêm '= 0' vào một trong các phương thức của lớp trừu tượng của tôi. –

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