Estou aprendendo c++ por enquanto e tentando criar um vector
tipo de dados personalizado Employee
.
Código Funcionário.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;
}
};
Código Funcionário.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;
}
Quando tentei inicializar vector<Employee>
em MyForm.h, assim:
private: std::vector<Employee^> Employees;
Ocorre um erro em "^": E2244 um membro da classe gerenciada não pode pertencer ao tipo de classe não gerenciada.
Tentei usar ponteiros diferentes, bem como criar um construtor de cópia para a classe Employee (tentei encontrar situações semelhantes com outras pessoas), mas isso causou ainda mais erros. Talvez o erro seja trivial e simples, mas infelizmente não tenho muito tempo para mergulhar na teoria. O que estou fazendo de errado e como posso consertar? Ficarei muito feliz se você puder explicar em detalhes.
C++ e C++/CLI são linguagens diferentes:
C++/CLI é a versão .NET do C++ nativo.
Você não pode usar um contêiner C++ nativo
std::vector
para armazenar objetos .NET como seu arquivoEmployee
.Em vez disso, você deve usar um contêiner C++/CLI (ou seja, .NET).
Um desses candidatos é
System::Collections::Generic::List
, por ser um tanto semelhante astd::vector
, com um layout de memória contínuo para os elementos e acesso aleatório a eles.No seu caso será: