C++/CLI Winforms。 E2244“托管类的成员不能属于非托管类类型”

问题描述 投票:0回答:1

我现在正在学习 C++,并尝试创建自定义数据类型

vector
Employee.h代码:

Employee

Employee.cpp代码:

public ref class Employee { public: System::String^ name; int age; Employee() { name = ""; age = 0; } Employee(System::String^ n, int a) { name = n; age = a; } };

当我尝试在 MyForm.h 中初始化 
#include "Employee.h" #include <string> int main() { std::vector<Employee^> employees; employees.push_back(gcnew Employee("Alice", 20)); employees.push_back(gcnew Employee("Bob", 22)); return 0; }

时,如下所示:

vector<Employee>

“^”发生错误:E2244 托管类的成员不能属于非托管类类型。

我尝试使用不同的指针,以及为 Employee 类创建一个复制构造函数(我尝试与其他人找到类似的情况),但这导致了更多错误。也许这个错误是微不足道且简单的,但不幸的是我没有太多时间深入研究这个理论。我做错了什么以及如何解决它?如果您能详细解释我将非常高兴。

winforms c++-cli stdvector
1个回答
0
投票
C++/CLI 是本机 C++ 的 .NET 版本。


您无法使用像

private: std::vector<Employee^> Employees;

这样的本机 C++ 容器来保存像您的

std::vector
这样的 .NET 对象。
您应该使用 C++/CLI(即 .NET)容器。

Employee
是一个直接的候选者,因为它有点类似于

System::Collections::Generic::List
,具有元素集的连续内存布局,以及对它们的随机访问。
就您而言,它将是:

std::vector

© www.soinside.com 2019 - 2024. All rights reserved.