Недавно я узнал о функциональности ##, которую я могу определить в начале моего кода. Я пытаюсь скомпилировать следующий код:C++ help concatenating TCHAR
#include <windows.h>
#include <tchar.h>
#include <iostream>
#include <stdio.h>
#include <string>
#define paste(x,y) *x##*y
int main()
{
TCHAR *pcCommPort = "COM";
TCHAR *num = "5";
cout << paste(pcCommPort,num);
return 0;
}
и я получаю следующее сообщение об ошибке:
expression must have arithmetic or unscoped enum type
это не нравится тот факт, что я использую указатели в моей «определить» вставить строку , Без каких-либо указателей он просто вернет переменную «pcCommPort5». я хочу «COM5».
Я попытался _tcscat, strcat, strcat_s, визуальная студия не нравится ни один из них ....
Не используйте препроцессор, если вам это не нужно. Он выполняется перед обычной компиляцией (как намечено ее именем), а не во время выполнения. – chris
'_tcscat' должен работать, вам просто нужно предоставить буфер для записи подходящего размера. Создайте третью переменную как массив 'TCHAR', используйте' _tcscpy', чтобы скопировать первую строку в нее, а затем используйте '_tcscat', чтобы добавить вторую строку. Или используйте 'std :: basic_string' вместо этого и сэкономьте себе много горя. Или забудьте о 'TCHAR' целиком, так как вы, вероятно, никогда не будете использовать его как« char », и используйте' std :: wstring'. –
Ой, не обращая внимания на последнюю часть моего комментария, так как вы успешно назначаете нормальную строку 'char' для переменной, вы должны быть настроены так, что' TCHAR' является 'char'. Это означает, что вы должны использовать 'std :: string'. –