C ++ CLR托管DLL无法使用向量成员

时间:2014-03-14 06:06:53

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

我的课程中有以下代码:

#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 }
}

我收到错误enter image description here

我不明白为什么我不能使用矢量成员虽然它在我不构建时没有显示错误

编辑:我忘记了尺寸旁边的()。现在唯一的问题是错误&#34;不能在类型&#39; System :: String ^&#39;上使用此间接。由于push_back

2 个答案:

答案 0 :(得分:0)

System :: String是托管类型,std :: vector不是。他们在一起打得不好。您应该将std :: string与向量一起使用,或者System::Collections::Generic::List<>用于托管类型。

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

OR

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

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

答案 1 :(得分:0)

尝试将vector<string> temp用于您的文字数据,&#34; fstream&#34;用于加载文件和&#34; find_if&#34;用字符串比较std的机制,用于在向量中搜索。

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