带有用户定义对象向量的 C++/CLI Console::WriteLine
Posted
技术标签:
【中文标题】带有用户定义对象向量的 C++/CLI Console::WriteLine【英文标题】:C++/CLI Console::WriteLine with Vector of User Defined Objects 【发布时间】: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
,而不是与对应于.NET System::Collections::Generic::LinkedList
的std::list
混淆)
最后,可以将托管数据保存在普通类中,例如使用gcroot<System::String^>
@Ben Voight:将我的课程更改为“ref”课程,并将我的所有 std::string 项目更改为 System::String^ 项目都有效。使用“cout
【参考方案1】:
根据@Ben Voight 的建议:
将我的班级更改为“ref”班级,并将我的所有 std::string 项目更改为 System::String^ 项目。
(它确实导致我的代码出现其他问题,但这是一个不同的问题,与他的答案/解决方案解决了这个特定问题/问题的事实无关。)
【讨论】:
以上是关于带有用户定义对象向量的 C++/CLI Console::WriteLine的主要内容,如果未能解决你的问题,请参考以下文章