错误:标识符未在c++中定义
Error : identificator not defined in c++
我有这个函数返回一个字符串:
string getStringFromFile()
{
ifstream in("in.txt");
ofstream out("out.txt");
std::string line;
while(getline(in,line)){
if(line.empty())
line="http://www.google.com/";
}
return line;
}
当尝试调用getStringFromFile
函数时,它返回语法错误(Error : identificator not defined)
。
CreateWindowEx(0, _T("EDIT"),
_T(getStringFromFile()),
WS_CHILD | WS_VISIBLE | WS_BORDER,
260, 10,
200, 20,
hWnd, NULL, hInst, NULL);
不能这样使用_T()
。它是一个将L
后缀应用于字符串字面值的宏,而不是一个可以应用于任意表达式的函数。
你应该从这些库类型的宽字符串版本开始,这本质上相当于你试图破解的_T()
:
-
std::wifstream
-
std::wofstream
-
std::wstring
似乎也有可能,当你调用一个Windows API函数,你将不得不获得一个指向字符串数据的指针,而不是试图传递一个实际的c++字符串对象。
-
getStringFromFile().c_str()
这将给你你需要的wchar_t const*
,虽然,说实话,我不完全确定是否它是安全的这样做与临时的。这取决于CreateWindowEx
的先决条件是什么。
最安全的方法,IMO:
std::wstring getStringFromFile()
{
std::wifstream in("in.txt");
std::wofstream out("out.txt");
std::wstring line;
while (std::getline(in,line)) {
if (line.empty())
line = "http://www.google.com/";
}
return line;
}
// ...
const std::wstring str = getStringFromFile();
CreateWindowEx(0, _T("EDIT"),
str.c_str(),
WS_CHILD | WS_VISIBLE | WS_BORDER,
260, 10,
200, 20,
hWnd, NULL, hInst, NULL
);
更复杂的是,当您的程序定义了UNICODE
时,_T()
宏仅对字符串字面值应用L
后缀。如果您希望同时支持Unicode和非Unicode模式,则需要在未定义UNICODE
时切换回原始std::string
等。话虽如此,我一直认为禁用UNICODE
现在是罕见的。不过,我不是Windows开发人员& help;
不能在_T
宏中调用该函数
宏扩展为(可能)将L
附加到字符串文字。你的函数返回一个std::string
,所以你不能把它当作一个文字来修改。
要清楚,这就像有函数
int foo()
{
return 5;
}
并将其命名为
foo().0
这显然不会将int
转换为double
,因为您添加了.0
,它将指定双字量
_T是一个宏,用于根据项目的设置处理UNICODE或ANSI字符串的文字字符串。如果您想同时支持这两种方法,则必须相应地编写getStringFromFile()函数,方法是在UNICODE构建下返回std::wstring,并调用.c_str()方法将值传递给CreateWindowEx函数。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何定义一个纯抽象基类