2012-07-10 36 views
10

Tôi có biểu mẫu .NET và mã gốc trong Visual Studio của mình. Vấn đề là: Tôi không thể tuyên bố một trường hợp toàn cầu của hình thức NET của tôi trong mã mẹ đẻ của tôi, như thế này:C++ khai báo biến được quản lý trong mã gốc

Editor^ maineditor; 

Nó mang lại cho tôi vấn đề này:

error C3145: 'EditorEntry' : global or static variable may not have managed type 'Cube3D::Editor ^' 
+1

Bài viết MSDN cho C3145 tài liệu lỗi này tốt. Và cũng cung cấp cho workaround, làm cho nó một thành viên tĩnh của lớp ref. –

Trả lời

12

Thay vì sử dụng một toàn cầu tĩnh thử làm cho nó một phương pháp tĩnh trong một container loại

ref class ManagedGlobals { 
    public: 
    static Editor^ maineditor = nullptr; 
}; 
+0

THanks, nhưng khi tôi xác định trình soạn thảo, mã thứ hai này xuất hiện: biến có thời lượng lưu trữ tĩnh không thể có xử lý hoặc theo dõi loại tham chiếu –

+0

Và khi biên dịch: 'editor': biến toàn cầu hoặc tĩnh có thể không có loại được quản lý 'Cube3D: : Editor^' –

+0

@ user1492812 oops, không nhận ra đó là một vấn đề. Xóa phần đó của câu trả lời – JaredPar

5

quấn tay cầm với một gcroot <> struct

gcroot<Editor^> maineditor; 
+0

Làm việc như một sự quyến rũ và sạch hơn là tạo ra một lớp wrapper giả :-) – Cameron

0

Bạn có lớp tĩnh của bạn lên hàng đầu (referece: Can a class be declared static in c++?)

ref class ManagedGlobals abstract sealed { 
public: 
    static Excel::Application^ xl; 
}; 

Bây giờ chỉ cần tham khảo mà lớp

ManagedGlobals::xl = gcnew Excel::Application(); 
Các vấn đề liên quan