最近发现用.NET可以很方便的实现串口数据读取并将数据存入文件,但涉及到应用system^ string 以及std::string转化,还有函数调用方面的一些问题,请高手帮忙解答一下我的编译错误:
我在函数中应用了SYSTEM STRING 转 STD STRING 的函数:
void MarshalString ( String ^ s, string& os )
{
using namespace Runtime::InteropServices;
const char* chars =
(const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
os = chars;
Marshal::FreeHGlobal(IntPtr((void*)chars));
}
然后在主函数中调用
std::string buffer;
PortCommunication::MarshalString(message, buffer);
后出现编译错误
error C2352: 'PortCommunication::MarshalString' : illegal call of non-static member function。请问这是为什么?
此外,我调用函数
// write buffer data to txt file
void WriteDataToFile(string sentence)
{
char quit = 'c';
string str;
//open file to write
ofstream outfile ("GPSdata.txt", ios_base::out);
if(!outfile) {
cerr << "cannot open GPSdata.txt file !!!\n";
exit (-1);
}
//allow user to write to file
while (quit != 'q' && quit != 'Q')
{
getline(sentence, str);
outfile << str << endl;
cout<<"Enter q to quit or c to continue entering data.\n";
cin >> quit;
}
//close file
outfile.close();
}
在调用这个函数把BUFFER的数据写入文件,出现错误
GPSSerialPort.cpp(85) : error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &' from 'std::string'
请问这种情况怎么解决?
由于字数原因,我无法粘贴源代码,请高手指点一二,如有需要,我可以将源码传给你,谢谢!!
C++/CLR实现读取串口数据存入文件 此函数编译后出现illegal call of non-static member function, etc
答案:2 悬赏:40 手机版
解决时间 2021-02-23 02:54
- 提问者网友:轮囘Li巡影
- 2021-02-22 12:08
最佳答案
- 五星知识达人网友:雾月
- 2021-02-22 12:28
第一个问题,那函数在一个类里吧,在的话不是静态函数不能直接调用。通过对象来调用函数。
第二个问题,参数类型不匹配,参数个数不匹配,或者没有显式指明实参类型。
第二个问题,参数类型不匹配,参数个数不匹配,或者没有显式指明实参类型。
全部回答
- 1楼网友:孤独入客枕
- 2021-02-22 13:25
没看懂什么意思?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯