【发布时间】:2018-02-10 04:21:28
【问题描述】:
我有一个用户定义对象的向量,我想简单地将一些类成员(字段?)输出到控制台,但是当我尝试时,程序崩溃了。我尝试直接显示“EmployeeID”(它是一个 Int),以及将其转换为 System::String 和 std::string,每个方法使用多种方法(编组、转换为 char 数组等) .
std::vector<Employee> employee;
System::Console::WriteLine("Employee ID: " + employee.at(i).getEmployeeId());
我不知道为什么我不能简单地打印到控制台,但我对 CLI 很陌生,所以也许这是一个简单的修复和一个简单的错误?我对存储在员工对象中的其他变量也有同样的问题,那些其他项目是 std::string 类型。
对于那些其他成员,我更愿意使用 System::String 而不是 std::string,但是当我这样做时,我会收到一条奇怪的错误消息(“非托管类的成员不能有 ref 类类型或接口类类型”)。对这两个问题的任何帮助都会很好,但这篇文章专门针对 Console::WriteLine 问题。
【问题讨论】:
-
the program crashes:它是怎么崩溃的?你得到什么例外? -
您使用的控制台功能是为 .NET 对象设计的。还有为 C++ 对象设计的控制台输出函数,例如在
#include <iostream>中找到的cout -
如果要使用
System::String^,则将Employee更改为ref class并使用.NET 容器(相当于std::vector的.NET 关闭是System::Collections::Generic::List,而不是与对应于.NETSystem::Collections::Generic::LinkedList的std::list混淆) -
最后,可以将托管数据保存在普通类中,例如使用
gcroot<System::String^> -
@Ben Voight:将我的课程更改为“ref”课程,并将我的所有 std::string 项目更改为 System::String^ 项目都有效。使用“cout
标签: c++-cli