【问题标题】:C++ CLR Managed DLL cannot use vector membersC++ CLR 托管 DLL 不能使用向量成员
【发布时间】:2014-03-14 06:06:53
【问题描述】:

我的班级中有以下代码:

#include <cliext/vector>


vector<String ^> temp;

void Database::EditInfo()
{
 StreamReader ^MyInFile= gcnew StreamReader("Database.txt");
  while (!MyInFile->EndOfStream)
    {
        temp.push_back(MyInFile->ReadLine());
    }

  for (int i = 0; i < temp.size; i++){ //statements }
}

我收到一个错误

我不明白为什么我不能使用向量成员,尽管我不构建它时它没有显示错误

编辑:我忘记了尺寸旁边的 ()。现在唯一的问题是错误“由于 push_back,无法在类型 'System::String^' 上使用此间接

【问题讨论】:

    标签: .net c++-cli clr managed


    【解决方案1】:

    System::String 是托管类型,std::vector 不是。他们一起玩得不好。您应该将 std::string 与您的向量一起使用,或者将 System::Collections::Generic::List&lt;&gt; 用于您的托管类型。

    std::vector<std::string> plain;
    

    System::Collections::Generic::List<System::String^>^ managed;
    

    一般来说,您为什么要使用 C++/CLI?它会在你的路上多次伤害你。 C++/CLI 结合了 .NET 的缓慢性能和 C++ 的神秘语法。如果您不明白为什么要这样做,请为自己节省一年的痛苦,并选择适合您需要的 C# 或纯 C++。 C++/CLI 是一种专门的语言,适合那些需要将这两者结合起来的人,因为他们有遗留代码要包装或需要与未管理的东西交互。

    【讨论】:

    • 嗨,我正在使用 C++/CLI 来满足项目需求。我使用在文本文件中存储行的向量。因为它有成员“包含”,所以我很容易从一行中搜索一个单词。有什么你可以建议的与此相同的吗?
    • @BrianSanchez 是的。要么使用 std::ifstream 和 std::string 在纯 C++ 中进行,要么使用 array&lt;String^&gt;^ lines = System::IO::File::ReadAllLines(path); 进行管理,但请选择一个,混合它们只会让你希望你从一开始就没有开始编程。确保您没有误解您的项目要求。 C++/CLI 只在非常非常小的问题子集上有意义。
    【解决方案2】:

    尝试将vector&lt;string&gt; temp 用于您的文本数据,“fstream”用于加载文件,“find_if”与来自 std 的字符串比较机制用于在向量中搜索。

    在使用 C++ 编程时使用 C++ 标准库 - 必须是很好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多