我现在正在学习 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 类创建一个复制构造函数(我尝试与其他人找到类似的情况),但这导致了更多错误。也许这个错误是微不足道且简单的,但不幸的是我没有太多时间深入研究这个理论。我做错了什么以及如何解决它?如果您能详细解释我将非常高兴。
您无法使用像
private: std::vector<Employee^> Employees;
这样的本机 C++ 容器来保存像您的
std::vector
这样的 .NET 对象。您应该使用 C++/CLI(即 .NET)容器。
Employee
是一个直接的候选者,因为它有点类似于
System::Collections::Generic::List
,具有元素集的连续内存布局,以及对它们的随机访问。就您而言,它将是:
std::vector