带有用户定义对象向量的 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 &lt;iostream&gt; 中找到的cout 如果要使用System::String^,则将Employee 更改为ref class 并使用.NET 容器(相当于std::vector 的.NET 关闭是System::Collections::Generic::List,而不是与对应于.NET System::Collections::Generic::LinkedListstd::list 混淆) 最后,可以将托管数据保存在普通类中,例如使用gcroot&lt;System::String^&gt; @Ben Voight:将我的课程更改为“ref”课程,并将我的所有 std::string 项目更改为 System::String^ 项目都有效。使用“cout 【参考方案1】:

根据@Ben Voight 的建议:

将我的班级更改为“ref”班级,并将我的所有 std::string 项目更改为 System::String^ 项目。

(它确实导致我的代码出现其他问题,但这是一个不同的问题,与他的答案/解决方案解决了这个特定问题/问题的事实无关。)

【讨论】:

以上是关于带有用户定义对象向量的 C++/CLI Console::WriteLine的主要内容,如果未能解决你的问题,请参考以下文章

使用带有引用的对象向量的 C++ 语法

通过指针、强制转换和取消引用加载向量?

System::Collections::Generic::自定义类对象列表 c++/cli

如何将 C++ 本机对象编组到托管 C++ CLI

将轮廓点向量复制到垫子中

如何使用大小和值构造函数使用成员初始化器列表初始化用户定义对象的向量