我现在正在学习 C++ 并尝试创建vector
自定义数据类型Employee
。
Employee.h代码:
public ref class Employee {
public:
System::String^ name;
int age;
Employee() {
name = "";
age = 0;
}
Employee(System::String^ n, int a) {
name = n;
age = a;
}
};
员工.cpp代码:
#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>
在 MyForm.h 中初始化时,如下所示:
private: std::vector<Employee^> Employees;
“^”上发生错误:E2244 托管类的成员不能属于非托管类类型。
我尝试使用不同的指针,以及为 Employee 类创建一个复制构造函数(我试图与其他人找到类似的情况),但这会导致更多错误。也许这个错误是微不足道且简单的,但不幸的是我没有太多时间深入研究这个理论。我做错了什么以及如何解决它?如果您能详细解释,我将非常高兴。
C++ 和 C++/CLI 是不同的语言:
C++/CLI 是本机 C++ 的 .NET 版本。
您不能使用本机 C++ 容器来
std::vector
保存 .NET 对象,例如您的Employee
.相反,您应该使用 C++/CLI(即 .NET)容器。
其中一个候选者是
System::Collections::Generic::List
,因为它有点类似于std::vector
,具有元素的连续内存布局以及对它们的随机访问。在你的情况下它将是: