在我的程序中,我声明了一个函数prototype
,如:
void callToPrint(LPTSTR , LPVOID , DWORD , string )
但由于此声明,我收到以下错误:error C2061: syntax error : identifier 'string'
代码中还有其他错误,表明function
没有4 arguments.
(error C2660: 'callToPrint' : function does not take 4 arguments)
为什么我会收到此错误?我该如何解决这些问题呢?
我的第二个问题是:
nameofPrinter
类型的变量LPTSTR
,但是当我写出语句getline( cin , nameOfPrinter )
时,显示的错误是没有重载函数getline
匹配参数列表的实例。那么我如何从用户那里收到nameOfPrinter
?答案 0 :(得分:3)
回答第一个问题:
error C2061: syntax error : identifier 'string'
您需要在要声明函数的标头或源文件中包含string
头文件,例如:
#include <string>
&安培;
namespace std
;应该包含在源文件中
像:
using namespace std;
或者 或者,您应该使用:
std::string
回答第二个问题:
istream::getline()
是istream
类中的一个函数,其中包含以下重载版本:
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
显然,它不理解你定义的LPTSTR
类型,因此它告诉你没有匹配的函数调用,它将LPTSTR
作为参数。
如何解决?
在@Cody Gray的评论中,向您解释真正的问题,解决方案是建议以一种格式转换LPTSTR
,以便它与istream::getline()
参数凸轮匹配,这必然意味着转换您拥有的字符串使用 wcstombs()
wchar_t*
到char*
答案 1 :(得分:2)
您的文件需要包含以下行:
#include <string>
头文件string
包含string
类的定义。因为该类在std
命名空间内,所以函数原型必须是:
void callToPrint(LPTSTR , LPVOID , DWORD , std::string );
由于您在原型中使用LPTSTR
,因此您必须使用Visual C ++。如果您的项目设置为使用Unicode字符集而不是多字节字符集,则需要相应地调整您的类型。
对于Unicode字符集:
std::wstring nameOfPrinter;
std::getline( std::wcin , nameOfPrinter );
或者,您可以将字符串的类型声明为:
std::basic_string<TCHAR> nameOfPrinter;
不幸的是,在cin
和wcin
之间切换时,不存在这样的模板化类。所以你必须求助于预处理器。
#if defined(UNICODE) || defined(_UNICODE)
#define _tcin wcin
#else
#define _tcin cin
#endif
std::basic_string<TCHAR> nameOfPrinter;
std::getline( std::_tcin , nameOfPrinter );
答案 2 :(得分:0)
但由于此声明,我收到以下错误:错误C2061: 语法错误:标识符'string'
您需要#include <string>
并使用using namespace std;
或将string
声明为std::string
以使用string
类。
显示的错误不是重载函数getline的实例 匹配参数列表。
getline()
的第二个参数是对std::string
的引用。 Apparently LPTSTR
is not std::string
。请改用std::string
。
看起来你正在开发GUI应用程序。为什么要使用 cin
?