我想请求这个小程序的一些帮助。我正在使用Embarcadero RAD XE2并尝试使用按钮和文本框构建一个小表单。机制很简单,我在文本框中写了一些东西,当我点击按钮时,我希望将这些东西写入.txt文件。
以下是我的.cpp文件中的代码:
//---------------------------------------------------------------------------
#include <fmx.h>
#include <iostream.h>
#include <fstream.h>
#include <String>
#pragma hdrstop
#include "STRTEST.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------
int writefile(String A)
{
ofstream myfile;
myfile.open("D://example.txt");
myfile << A;
myfile.close();
return 0;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String mystr = Edit1->Text+';';
writefile(mystr);
Form1->Close();
}
//---------------------------------------------------------------------------
现在,我遇到了这个问题:在“mystr&lt;&lt; A;”行中我收到了这个错误。
[BCC32错误] STRTEST.cpp(13):E2094'运算符&lt;&lt;'未实施 为'UnicodeString'类型的参数输入'ofstream'完整解析器 上下文 STRTEST.cpp(10):解析:int writefile(UnicodeString)
我不知道该怎么办。如果我用直接字符串替换A,即(mystr&lt;&lt;“HI”),函数writefile完美无缺,并用该特定字符串写入文件。
那里的任何人都知道如何解决这个问题?
答案 0 :(得分:0)
只有在项目中定义<<
时才会实现>>
值的String
和VCL_IOSTREAM
运算符。即使这样,它仍然无法工作,因为您正在使用ofstream
,它不接受Unicode数据(String
是CB2009 +中UnicodeString
的别名)。您必须改为使用wofstream
,然后使用String::c_str()
来传输值:
//---------------------------------------------------------------------------
#include <fmx.h>
#include <iostream>
#include <fstream>
#include <string>
#pragma hdrstop
#include "STRTEST.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------
int writefile(System::String A)
{
std::wofstream myfile;
myfile.open(L"D://example.txt");
myfile << A.c_str();
myfile.close();
return 0;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
System::String mystr = Edit1->Text + L";";
writefile(mystr);
Close();
}
//---------------------------------------------------------------------------