Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224

Выражение должно быть доступным для изменения левосторонним значением

21.04.2018, 18:43. Показов 2554. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Записываю имена подкаталогов в динамическую память globalfolders (WCHAR *globalfolders = new WCHAR[1000])
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private: void getfolders(){
            // получает в массив SUKABLYAT указатели на имена папок в каталоге base/
            int fl = 0;
            WIN32_FIND_DATA FindFileData;
            WCHAR *ukaz = &globalfolders[0];
            HANDLE hf;
            hf = FindFirstFile(L"base/*", &FindFileData);
            if (hf != INVALID_HANDLE_VALUE)
            {
                do
                {
                    if (fl > 1) {
                        ukaz = FindFileData.cFileName;
                        ukaz++;
                    }
                    else fl++;
                } while (FindNextFile(hf, &FindFileData) != 0);
                FindClose(hf);
            }
        }
Теперь хочу делать примерно следующее.
ifstream f("base/"+*globalfolders+"/anyfile.txt");

Но как реализовать это без понятия.
вероятно нужно привести значение по адресу globalfolders[0]
Проблема именно в приведении *globalfolders из WCHAR.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.04.2018, 18:43
Ответы с готовыми решениями:

Выражение должно быть допустимым для изменения левосторонним значением
Вот код: a ^ 2 = a*a; a ^ 4 = a^2 * a^2; a ^ 8 = a^4 * a^4; a ^ 16 = a^8 * a^8; Ошибки находятся тут: a ^ 4 и т.д. Не знаю что...

Выражение должно быть допустимым для изменения левосторонним значением
День добрый просветите пожалуйста что ему не нравится ? #include <iostream> #include <cstdlib> #include <ctime> using...

Выражение должно быть допустимым для изменения левосторонним значением
struct ITEM { struct { char N; char A; char S; } NAS; char vers; }; struct LIST {

23
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
21.04.2018, 18:50
Если Юникод, то wifstream.
Если многобайтовая кодировка, то вместо WCHAR используйте char, L перед строками не пишите.

Чтобы соединить строки в многобайтовой кодировке strcat().
В Юникоде wcscat().
1
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224
21.04.2018, 18:58  [ТС]
На сколько я понял две кодировки тут не могут соединиться.
wcscat("base/"+*globalfolders+"/anyfile.txt") - ругает
strcat("base/"+*globalfolders+"/anyfile.txt") - ругает

В файл уже писать ничего не нужно, это я для просмотра значений делал. Теперь все нужное содержится в globalfolders.
Осталось только получить полный путь, открывать я буду конечный файл через ifstream, там обычные текстовые файлы, с кодировкой что у них по умолчанию, с ними ifstream работает.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
21.04.2018, 19:08
Roulen, я же написал, что для соединения строк надо использовать функции, а не "+".

Добавлено через 3 минуты
C++
1
2
3
char temp[256] = "base/";
strcat(temp, *globalfolders);
strcat(temp, "/anyfile.txt");
1
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224
21.04.2018, 19:14  [ТС]
извиняюсь, тупанул, думал что эти функции возвращают значение финальное и ему приравнивал char.
strcat(temp, *globalfolders); - ругает, не дает const char* и WCHAR* сложить.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
21.04.2018, 19:15
Roulen, вы определитесь сначала в многобайтовой кодировке будет проект или в Юникоде. Весь код переделывать надо под одну из этих кодировок.
1
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224
21.04.2018, 20:03  [ТС]
Спасибо, сделал кажется.
C++
1
2
3
4
WCHAR temp[256] = L"base/";
wcscat(temp, globalfolders);
wcscat(temp, L"/anyfile.txt");
ifstream f(temp);
Добавлено через 7 минут
Нет, не сделал. Данный код :
C++
1
2
3
WCHAR temp[256] = L"base/";
wcscat(temp, globalfolders);
wcscat(temp, L"/anyfile.txt");
Вызывает краш программы
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
21.04.2018, 20:13
Roulen, temp обнуляете после каждого прохода цикла?
0
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224
21.04.2018, 20:15  [ТС]
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Roulen, temp обнуляете после каждого прохода цикла?
Он находиться вне цикла, после прохода цикла вызывается.
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
private: void getfolders(){
            // получает в массив globalfolders указатели на имена папок в каталоге base/
            int fl = 0;
            WIN32_FIND_DATA FindFileData;
            WCHAR *ukaz = &globalfolders[0];
            HANDLE hf;
            hf = FindFirstFile(L"base/*", &FindFileData);
            if (hf != INVALID_HANDLE_VALUE)
            {
                do
                {
                    if (fl > 1) {
                        ukaz = FindFileData.cFileName;
                        ukaz++;
                    }
                    else fl++;
                } while (FindNextFile(hf, &FindFileData) != 0);
                FindClose(hf);
 
                WCHAR temp[256] = L"base/";
                wcscat(temp, globalfolders + 3);
                wcscat(temp, L"/anyfile.txt");
                //ofstream f(temp);
                //f << "HELLO OLEG" << endl;
            }
        }
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
21.04.2018, 20:17
Roulen, и опять вы путаете Юникод и многобайтовую кодировку.

WCHAR, wcscat, wifstream - Юникод.
char, strcat, ifstream - многобайтовая кодировка.
1
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224
21.04.2018, 20:18  [ТС]
Извиняюсь, нужно уходить, подробности скинуть не смогу больше, большое спасибо что помогали мне, очень благодарен.
Хорошего вечера.

Добавлено через 51 секунду
Мне дается WHAR
C++
1
 ukaz = FindFileData.cFileName;
Я обязан дальше работать в юникде. В нем я получаю путь, после чего пытаюсь открыть по этому пути уже в многобайтовой.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
21.04.2018, 20:33
Roulen, покажите globalfolders где объявляете.

Добавлено через 9 минут
И какая кодировка у вас в настройках проекта выбрана?
1
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224
22.04.2018, 00:09  [ТС]
Цитата Сообщение от QuakerRUS Посмотреть сообщение
покажите globalfolders где объявляете.
C++
1
2
3
WCHAR *ukaz = &globalfolders[0];
ukaz = FindFileData.cFileName;
ukaz++;
Цитата Сообщение от QuakerRUS Посмотреть сообщение
И какая кодировка у вас в настройках проекта выбрана?
Использовать набор символов Юникода
Однако если менять на многобайтную, выдает около 100 строк ошибок...
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
22.04.2018, 01:29
Цитата Сообщение от Roulen Посмотреть сообщение
WCHAR *ukaz = &globalfolders[0];
Это объявление указателя ukaz, а не globalfolders.
0
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
22.04.2018, 01:39
Цитата Сообщение от Roulen Посмотреть сообщение
ifstream f(("base/"+std::string(globalfolders)+"/anyfile.txt").c_str());
Если там WCHAR, то, думаю, разберёшься, чем заменть std::string.

Цитата Сообщение от QuakerRUS Посмотреть сообщение
strcat
> С++
> 2018
> strcat
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
22.04.2018, 02:20
Цитата Сообщение от rat0r Посмотреть сообщение
Если там WCHAR, то, думаю, разберёшься, чем заменть std::string.
std::wstring
1
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224
22.04.2018, 15:23  [ТС]
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Сообщение от Roulen
WCHAR *ukaz = &globalfolders[0];
Это объявление указателя ukaz, а не globalfolders.
Я дал указатель на начальный адрес, потом по этим адресам (указывающих на ту же память, что и globalfolders) задавал значения. После чего уже с указателя globalfolders пытаюсь брать эти значения.

Указатели то , что ukaz , что globalfolders смотрят на одни и те же адреса в итоге.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
22.04.2018, 15:24
Roulen, отлично, но объявление вы мне так и не показали.
0
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224
22.04.2018, 15:26  [ТС]
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Roulen, отлично, но объявление вы мне так и не показали.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
#pragma warning(disable:4996)
#pragma comment(lib, "ws2_32.lib")
#include <Windows.h>
#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <stdio.h>
using namespace std;
 
bool selected_type = false;
int good = 0, value, allvalue = 0, сtime = 0;
string file_type = "txt";
ofstream file2;
 
WCHAR *globalfolders = new WCHAR[1000];
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
private: void getfolders(){
            // получает в массив globalfolders указатели на имена папок в каталоге base/
            int fl = 0;
            WIN32_FIND_DATA FindFileData;
            WCHAR *ukaz = &globalfolders[0];
            HANDLE hf;
            hf = FindFirstFile(L"base/*", &FindFileData);
            if (hf != INVALID_HANDLE_VALUE)
            {
                do
                {
                    if (fl > 1) {
                        ukaz = FindFileData.cFileName;
                        ukaz++;
                    }
                    else fl++;
                } while (FindNextFile(hf, &FindFileData) != 0);
                FindClose(hf);
 
                WCHAR temp[256] = L"base/";
                wcscat(temp, globalfolders);
                wcscat(temp, L"/anyfile.txt");
            }
        }
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
22.04.2018, 15:32
Roulen, что то я не пойму, чего в итоге вы хотите добиться. Что вы хотите увидеть в этих строках?

C++
1
2
3
WCHAR temp[256] = L"base/";
wcscat(temp, globalfolders);
wcscat(temp, L"/anyfile.txt");
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2018, 15:32
Помогаю со студенческими работами здесь

Выражение должно быть допустимым для изменения левосторонним значением
Выдает ошибку на P = s; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;string&gt; using namespace std; void main() { ...

Выражение должно быть допустимым для изменения левосторонним значением
Здравствуйте! Подскажите, пожалуйста, в чем заключается ошибка и как ее исправить &quot;Выражение должно быть допустимым для изменения...

Выражение должно быть допустимым для изменения левосторонним значением
Получаю ошибку в переменной х в if (0 &lt; x &amp;&amp; x &lt; 100) { if ( x == 1 || x == 21 || x == 31 || x = 41 || x == 51 || x == 61 || x == 71...

Выражение должно быть допустимым для изменения левосторонним значением
Писал программу для вывода массива в виде спирали, но при обработке условий движения спирали выдало ошибку на переменной x1 ( Выражение...

Выражение должно быть допустимым для изменения левосторонним значением
Есть структура: struct Airport_Pass { int Distance; char Departur; char Destination; }; Чтобы инициализировать её в начале...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru