Каждый пост в интернете говорит мне использовать маршаллинг. Дело в том, что сортировка просто не будет работать в моем приложении Windows Forms. Библиотека сталкивается с формами Windows или чем-то вроде этого «Неоднозначного символа», я уже пытался поместить их в разные пространства имен, я уже пытался объявить пространства имен в других файлах cpp, это просто не будет работать. Я разрабатываю приложение Windows Form, и мне нужно сохранить данные в текстовом формате, используя fstream, но мне нужны мои данные в std :: string, иначе fstream не будет их читать. Но по какой-то причине формы Windows просто вынуждают вас использовать их управляемые классы, иначе говоря String ^. Кто-нибудь знает, как я мог бы выполнить эту задачу? Пожалуйста, я буду так благодарен.
Мой заголовок
#include "NewProject.h"
#include <fstream>
#include <msclr\marshal_cppstd.h>
Это мой метод загрузки
private: System::Void Interf_Load(System::Object^ sender, System::EventArgs^ e) {
ifstream infile;
bool fresh_start = false;
infile.open("Data.txt", ios::binary);
if (infile.fail()) {
fresh_start = true;
infile.close();
}
if (!fresh_start) {
size_t index; infile >> index;
for (size_t i = 0; i < index; i++) {
string* temp = new string[5];
for (size_t j = 0; j < 5; j++) {
infile >> temp[j];
}
String^ p1 = gcnew String(temp[0].c_str()); String^ p2 = gcnew String(temp[1].c_str());
String^ p3 = gcnew String(temp[2].c_str()); String^ p4 = gcnew String(temp[3].c_str());
String^ p5 = gcnew String(temp[4].c_str()); int valor = int::Parse(p5);
apu->proyectos.Add(gcnew Project(p1, p2, p3, p4, valor));
}
}
Это для сохранения.
private: System::Void button8_Click(System::Object^ sender, System::EventArgs^ e) {
ofstream outfile;
outfile.open("Data.txt", ios::binary);
outfile << apu->proyectos.Count << "\n";
for (size_t i = 0; i < apu->proyectos.Count; i++) {
std::string u1 = msclr::interop::marshal_as<std::string>(apu->proyectos[0]);
std::string u2 = msclr::interop::marshal_as<std::string>(apu->proyectos[1]);
std::string u3 = msclr::interop::marshal_as<std::string>(apu->proyectos[2]);
std::string u4 = msclr::interop::marshal_as<std::string>(apu->proyectos[3]);
std::string u5 = msclr::interop::marshal_as<std::string>(apu->proyectos[4]);
std::string line(std::string(u1 + " " + u2 + " " + u3 + " " + u4 + " " + u5) + "\n");
char* buffer = &line[0u];
outfile.write(buffer, line.size());
}
Close();
}
Тогда я получаю 1082 ошибки о неоднозначных символах. Мое приложение работает отлично, когда я удаляю материал Маршалла, так что это виновник.