【问题标题】:C++/CLI Console::WriteLine with Vector of User Defined Objects带有用户定义对象向量的 C++/CLI Console::WriteLine
【发布时间】: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

标签: c++-cli


【解决方案1】:

根据@Ben Voight 的建议:

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

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

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    相关资源
    最近更新 更多