Форум программистов, компьютерный форум CyberForum.ru

Невозможно преобразовать "const wchar_t [18]" в "TCHAR *" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Какие переменные используют при проектирование огромных объектов? http://www.cyberforum.ru/cpp-beginners/thread1800959.html
Планирую делать софт, в котором можно будет проектировать как мелкие детали механизмов, всякие винтики, болтики и пр, то есть где размеры в миллиметрах и их сотых частях, но в тоже время в этом же софте нужно будет проектировать и целые здания (сборки) и даже длинные трубопроводы, протяжённостью в километры. Всё это должно быть как бы на одном графическом ядре, то есть в одном и том же редакторе...
C++ Аргумент argv в функции main() Здравствуйте. Возникли некоторые непонимания при работе с аргументом argv и указателями в целом. Мне сказали, что, при передаче адреса массива символов в cout, C++ автоматически выведет весь массив. Почему же тогда, чтобы обратиться к массиву символов, на которые указывает argv, нужно писать именно argv? Ведь argv = *(argv + x), а конструкция вида argv + x уже возвращает адрес массива. ... http://www.cyberforum.ru/cpp-beginners/thread1800943.html
C++ Как сократить запись при инициализации статических переменных?
Добрый день. Есть в шаблонном классе набор non-const статических переменных, которые инициализируется, соответственно, вне класса: template<typename T, IntEnum v1, IntEnum v2, IntEnum k1, IntEnum k2, IntEnum k3, IntEnum z1, IntEnum q1> int16_t MyClass<T, v1, v2, k1, k2, k3, z1, q1>::SubClass1::Data::_x = 0; template<typename T, IntEnum v1, IntEnum v2, IntEnum k1, IntEnum k2, IntEnum k3,...
Как ускорить работу с файлами? C++
Предполагается, что программа будет работать с файлами размера 300-500МБ. Эти обычные функции работают слишком медленно. Может быть стоит использовать чистый С, например? #include <fstream> #include <iostream> #include <string> #include <Windows.h> using namespace std; void merge(ifstream &f1, ifstream &f2, ofstream &fRes) { string one, two;
C++ Как поместить в STL-контейнер экземпляры разных классов? http://www.cyberforum.ru/cpp-beginners/thread1800935.html
Как поместить в контейнер экземпляры разных классов(типов) :thank_you:?
C++ Multiple definition: почему компилятор ругается на единственную функцию, используемую в обоих source-файлах? Пихаю хедер в 2 сурсца разных классов. Компилятор ругается на единственную функцию, которую я использую в обоих сурсцах. #ifndef LIB #define LIB void func() {} #endif // LIB Файл: A.cpp подробнее

Показать сообщение отдельно
thechicho
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 14
Завершенные тесты: 1
31.08.2016, 14:38     Невозможно преобразовать "const wchar_t [18]" в "TCHAR *"
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifdef Q_OS_WIN
#include <windows.h>
#include <tchar.h>
#endif
 
TCHAR* envVarStrings[] =
{
    TEXT("OS         = %OS%"),
    TEXT("PATH       = %PATH%"), 
    TEXT("HOMEPATH   = %HOMEPATH%"),
    TEXT("TEMP       = %TEMP%")
};
Qt Creator. MSVC 14.0
Получаю ошибки
error: C2440: инициализация: невозможно преобразовать "const wchar_t [18]" в "TCHAR *"
error: C2440: инициализация: невозможно преобразовать "const wchar_t [20]" в "TCHAR *"
error: C2440: инициализация: невозможно преобразовать "const wchar_t [24]" в "TCHAR *"

в чем дело?

Добавлено через 1 час 52 минуты
C++
1
2
3
4
5
6
7
const TCHAR* envVarStrings[] =
{
    TEXT("OS         = %OS%"),
    TEXT("PATH       = %PATH%"), 
    TEXT("HOMEPATH   = %HOMEPATH%"),
    TEXT("TEMP       = %TEMP%")
};
Добавил const, ошибки исчезли

Добавлено через 48 минут
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
 
TCHAR* envVarStrings[] =
{
  TEXT("OS         = %OS%"),
  TEXT("PATH       = %PATH%"),
  TEXT("HOMEPATH   = %HOMEPATH%"),
  TEXT("TEMP       = %TEMP%")
};
#define  ENV_VAR_STRING_COUNT  (sizeof(envVarStrings)/sizeof(TCHAR*))
#define INFO_BUFFER_SIZE 32767
void printError( TCHAR* msg );
 
void main( )
{
  DWORD i;
  TCHAR  infoBuf[INFO_BUFFER_SIZE];
  DWORD  bufCharCount = INFO_BUFFER_SIZE;
 
  // Get and display the name of the computer. 
  bufCharCount = INFO_BUFFER_SIZE;
  if( !GetComputerName( infoBuf, &bufCharCount ) )
    printError( TEXT("GetComputerName") ); 
  _tprintf( TEXT("\nComputer name:      %s"), infoBuf ); 
 
  // Get and display the user name. 
  bufCharCount = INFO_BUFFER_SIZE;
  if( !GetUserName( infoBuf, &bufCharCount ) )
    printError( TEXT("GetUserName") ); 
  _tprintf( TEXT("\nUser name:          %s"), infoBuf ); 
 
  // Get and display the system directory. 
  if( !GetSystemDirectory( infoBuf, INFO_BUFFER_SIZE ) )
    printError( TEXT("GetSystemDirectory") ); 
  _tprintf( TEXT("\nSystem Directory:   %s"), infoBuf ); 
 
  // Get and display the Windows directory. 
  if( !GetWindowsDirectory( infoBuf, INFO_BUFFER_SIZE ) )
    printError( TEXT("GetWindowsDirectory") ); 
  _tprintf( TEXT("\nWindows Directory:  %s"), infoBuf ); 
 
  // Expand and display a few environment variables. 
  _tprintf( TEXT("\n\nSmall selection of Environment Variables:") ); 
  for( i = 0; i < ENV_VAR_STRING_COUNT; ++i )
  {
    bufCharCount = ExpandEnvironmentStrings(envVarStrings[i], infoBuf,
        INFO_BUFFER_SIZE ); 
    if( bufCharCount > INFO_BUFFER_SIZE )
      _tprintf( TEXT("\n\t(Buffer too small to expand: "%s")"), 
              envVarStrings[i] );
    else if( !bufCharCount )
      printError( TEXT("ExpandEnvironmentStrings") );
    else
      _tprintf( TEXT("\n   %s"), infoBuf );
  }
  _tprintf( TEXT("\n\n"));
}
 
void printError( TCHAR* msg )
{
  DWORD eNum;
  TCHAR sysMsg[256];
  TCHAR* p;
 
  eNum = GetLastError( );
  FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | 
         FORMAT_MESSAGE_IGNORE_INSERTS,
         NULL, eNum,
         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
         sysMsg, 256, NULL );
 
  // Trim the end of the line and terminate it with a null
  p = sysMsg;
  while( ( *p > 31 ) || ( *p == 9 ) )
    ++p;
  do { *p-- = 0; } while( ( p >= sysMsg ) &&
                          ( ( *p == '.' ) || ( *p < 33 ) ) );
 
  // Display the message
  _tprintf( TEXT("\n\t%s failed with error %d (%s)"), msg, eNum, sysMsg );
}
изначально нужно было запустить этот код. вылезли ошибки
в общем либо добавляйте #define _UNICODE выше #include <windows.h>

C++
1
2
3
4
#define _UNICODE
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
http://stackoverflow.com/questions/7...de-and-unicode
UNICODE is used by Windows headers
_UNICODE is used by C-runtime/MFC headers

либо где есть T (TCHAR) меняем руками на CHAR (An 8-bit Windows (ANSI) character. или WCHAR (A 16-bit Unicode character)
в моем случае WCHAR (A 16-bit Unicode character)

получается что-то вроде

C++
1
2
3
4
const WCHAR* envVarStrings[]
WCHAR infoBuf[INFO_BUFFER_SIZE];
GetComputerNameW
wprintf
http://stackoverflow.com/questions/3...ws-programming
TCHAR: A WCHAR if UNICODE is defined, a CHAR otherwise.
WCHAR: A 16-bit Unicode character.
CHAR: An 8-bit Windows (ANSI) character.
LPTSTR: An LPWSTR if UNICODE is defined, an LPSTR otherwise.
LPSTR: A pointer to a null-terminated string of 8-bit Windows (ANSI) characters.
LPWSTR: A pointer to a null-terminated string of 16-bit Unicode characters.
LPCTSTR: An LPCWSTR if UNICODE is defined, an LPCSTR otherwise.
LPCWSTR: A pointer to a constant null-terminated string of 16-bit Unicode characters.
LPCSTR: A pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters.

// String format specifiers:
e = _T("Example."); // Formats a string as either Multibyte or Unicode depending on project settings.
e = TEXT("Example."); // Formats a string as either Multibyte or Unicode depending on project settings (same as _T).
c = L"Example."; // Formats a string as Unicode.
a = "Example."; // Formats a string as Multibyte.

https://msdn.microsoft.com/ru-ru/library/wc7014hz.aspx

как-то так и заработает
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru