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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
ss1278ee
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 20
#1

Передать локальную переменную в новую функцию - C++

29.09.2016, 15:43. Просмотров 251. Ответов 18
Метки нет (Все метки)

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
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <windows.h>
 
using namespace std;
 
int main()
{
 
string info;
 
cout<<"\n\n\n\n\nPlease input folder name)";
 
cin>>info;
system("cls");
 
string NewFolderName="C:\"+info;
 
if(CreateDirectory(NewFolderName.c_str(), NULL));
else cerr<<"\nFail to create derectory "<<NewFolderName<<":("<<endl;
}
void Copy(LPCTSTR szInDirName, LPCTSTR szOutDirName, bool flag = false)
{
    WIN32_FIND_DATA ffd;
    HANDLE hFind;
 
    TCHAR szFind[MAX_PATH + 1];
    TCHAR szInFileName[MAX_PATH + 1];
    TCHAR szOutFileName[MAX_PATH + 1];
 
    lstrcpy(szFind, szInDirName);
    lstrcat(szFind, "\\*.*"); 
 
    hFind = FindFirstFile(szFind, &ffd);
 
    do
    {
        //Формируем полный путь (источник)
        lstrcpy(szInFileName, szInDirName);
        lstrcat(szInFileName, "\");
        lstrcat(szInFileName, ffd.cFileName);
 
        //Формируем полный путь (результат)
        lstrcpy(szOutFileName, szOutDirName);
        lstrcat(szOutFileName, "\");
        lstrcat(szOutFileName, ffd.cFileName);
 
        if(flag)
        {
            if(ffd.dwFileAttributes & 0x00000010)
            {
                if(lstrcmp(ffd.cFileName, ".") == 0 ||
                    lstrcmp(ffd.cFileName, "..") == 0) continue;
 
                CreateDirectory(szOutFileName, NULL);
                Copy(szInFileName, szOutFileName);
            }
        } //иначе пропускаем папки
        else
            if(ffd.dwFileAttributes & 0x00000010) continue;
 
        CopyFile(szInFileName, szOutFileName, TRUE);
    }
    while(FindNextFile(hFind, &ffd));
 
    FindClose(hFind);
}
 
int maincopy()
{
    Copy("C:\\1", NewFolderName.c_str(), true);
}
Получаем:
In function 'int maincopy()':
error: 'NewFolderName' was not declared in this scope
warning: no return statement in function returning non-void [-Wreturn-type]
Объявить NewFolderName.c_str() вне функции не вышло. Как исправить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2016, 15:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передать локальную переменную в новую функцию (C++):

Возврат ссылки на локальную переменную - C++
Привет, есть такой код: int*&amp; change(void) { int* x(new int(50)); return x; } int main(void) {

Возвращение ссылки на локальную переменную - C++
Заметил недавно одну интересную вещь. Как вообще работает такой код? Причем коректно. int&amp; func(); int main() { cout &lt;&lt; func(); ...

VS2010 отладчик не видит локальную переменную - C++
Добрый день! С чем это может быть связано?

Ошибка E2363 Попытка возвратить локальную переменную - C++
Такую ошибку выдает компилятор Embarcadero, в Студии почему то ее не выдает, мне нужно сделать так чтобы и в эмбаркадеро не выдавало...

Не могу заставить g++ не инициализировать локальную переменную нулем - C++
Привет! Есть такой код (из серии &quot;что будет напечатано на экран&quot;) #include &lt;iostream&gt; using namespace std; int x = 1; ...

Как в данном контексте правильно разместить статическую локальную переменную? - C++
Задание такое: Напишите функцию, которая при каждом вызове будет выводить на экран количество раз, которое она вызывалась ранее. Напишите...

18
ture
441 / 334 / 126
Регистрация: 27.11.2014
Сообщений: 1,042
29.09.2016, 15:49 #2
ss1278ee, мы тут с товарищами в коллективе посовещались и думаем удалить эту функцию.
0
ss1278ee
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 20
29.09.2016, 20:37  [ТС] #3
Можно удалить. А толку:
In function 'void Copy(LPCTSTR, LPCTSTR, bool)':|
error: 'NewFolderName' was not declared in this scope|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 2 second(s)) ===|
0
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
29.09.2016, 20:56 #4
Ты тот текст показываешь? Ни та, ни другая функции не используются, и имени этого в Copy() нет.
0
sergestus
76 / 76 / 23
Регистрация: 26.10.2011
Сообщений: 216
Завершенные тесты: 1
29.09.2016, 21:20 #5
Нужно перенести перед main строку:
C++
1
string NewFolderName="C:"+info;
0
ss1278ee
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 20
29.09.2016, 23:02  [ТС] #6
Цитата Сообщение от sergestus Посмотреть сообщение
Нужно перенести перед main строку:
Так не получается. Я ввожу info в консоли. Вне функции main, это перестает работать.
error: 'cout' does not name a type|
error: 'cin' does not name a type|
error: expected constructor, destructor, or type conversion before '(' token|
error: expected unqualified-id before 'if'|
error: expected unqualified-id before 'else'|
In function 'int maincopy()':|
warning: no return statement in function returning non-void [-Wreturn-type]|
||=== Build failed: 5 error(s), 1 warning(s) (0 minute(s), 2 second(s)) ===|
А NewFolderName="C:\"+info.
0
VAN0
58 / 58 / 33
Регистрация: 05.05.2013
Сообщений: 150
Завершенные тесты: 1
29.09.2016, 23:10 #7
а если перед main
C++
1
string NewFolderName="C:";
а после ввода info
C++
1
NewFolderName = NewFolderName + info;
или вынести объявление NewFolderName из функции maincopy в область глобальных переменных.
0
sergestus
76 / 76 / 23
Регистрация: 26.10.2011
Сообщений: 216
Завершенные тесты: 1
29.09.2016, 23:20 #8
Цитата Сообщение от ss1278ee Посмотреть сообщение
C++
1
string NewFolderName="C:"+info;
нужно еще второй слеш добавить:
C++
1
"C:\"
0
ss1278ee
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 20
29.09.2016, 23:33  [ТС] #9
Цитата Сообщение от VAN0 Посмотреть сообщение
а если перед main
C++
1
string NewFolderName="C:";
а после ввода info
C++
1
NewFolderName = NewFolderName + info;
или вынести объявление NewFolderName из функции maincopy в область глобальных переменных.
Так тоже не получается. Ведь info остается внутри функции main, и стирается после ее закрытия.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using namespace std;
 
string NewFolderName="C:";
 
int main()
{
 
string info;
 
cout<<"\n\n\n\n\nPlease input folder name)";
 
cin>>info;
system("cls");
}
 
string NewFolderName="C:"+info;
отдаст:

error: redefinition of 'std::string NewFolderName'|
note: 'std::string NewFolderName' previously declared here|
error: 'info' was not declared in this scope|
0
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
30.09.2016, 09:08 #10
Ты сначала определись, зачем тебе эта переменная и функция, если они не используются. У тебя main() по сути пустой.
0
ss1278ee
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 20
30.09.2016, 11:16  [ТС] #11
Цитата Сообщение от nmcf Посмотреть сообщение
Ты сначала определись, зачем тебе эта переменная и функция, если они не используются. У тебя main() по сути пустой.
Ну так я написал. То, что в main, не работает за пределами функции. Почему, я не знаю. За этим и функция.
main, чтобы указать имя новой директории.
maincopy, скопировать содержимое старой директории в новую.
0
ture
441 / 334 / 126
Регистрация: 27.11.2014
Сообщений: 1,042
30.09.2016, 11:26 #12
ss1278ee, передай ссылку или указатель на переменную в свою функцию, и не выноси мозги.
0
ss1278ee
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 20
30.09.2016, 12:42  [ТС] #13
ture, а как делается? С передачей ссылок сразу нагуглил, но прикрутить не получается.
0
ture
441 / 334 / 126
Регистрация: 27.11.2014
Сообщений: 1,042
30.09.2016, 12:57 #14
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
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <windows.h>
 
using namespace std;
 
void Copy(LPCTSTR,LPCTSTR,bool);
void maincopy(const wstring&);
 
int main() {
 
    wstring info;
 
    cout << "\n\n\n\n\nPlease input folder name)";
    wcin >> info;
    system("cls");
 
    wstring NewFolderName = LR"(C:\)"+info;
    if(CreateDirectory(NewFolderName.c_str(), NULL))
        maincopy(NewFolderName);
    else 
        wcerr << "\nFail to create derectory " << NewFolderName << ":(" << endl;
 
    return 0;
}
 
void Copy(LPCTSTR szInDirName, LPCTSTR szOutDirName, bool flag = false) {
    WIN32_FIND_DATA ffd;
    HANDLE hFind;
 
    TCHAR szFind[MAX_PATH + 1];
    TCHAR szInFileName[MAX_PATH + 1];
    TCHAR szOutFileName[MAX_PATH + 1];
 
    lstrcpy(szFind, szInDirName);
    lstrcat(szFind, LR"(\*.*)");
 
    hFind = FindFirstFile(szFind, &ffd);
 
    do {
        //Формируем полный путь (источник)
        lstrcpy(szInFileName, szInDirName);
        lstrcat(szInFileName, LR"(\)");
                lstrcat(szInFileName, ffd.cFileName);
 
        //Формируем полный путь (результат)
        lstrcpy(szOutFileName, szOutDirName);
        lstrcat(szOutFileName, LR"(\)");
                lstrcat(szOutFileName, ffd.cFileName);
 
        if(flag) {
            if(ffd.dwFileAttributes & 0x00000010) {
                if(lstrcmp(ffd.cFileName, LR"(.)") == 0 ||
                   lstrcmp(ffd.cFileName, LR"(..)") == 0) continue;
 
                CreateDirectory(szOutFileName, NULL);
                Copy(szInFileName, szOutFileName);
            }
        } //иначе пропускаем папки
        else
            if(ffd.dwFileAttributes & 0x00000010) continue;
 
        CopyFile(szInFileName, szOutFileName, TRUE);
    } while(FindNextFile(hFind, &ffd));
 
    FindClose(hFind);
}
 
void maincopy(const wstring& NewFolderName) {
    Copy(LR"(C:\1)", NewFolderName.c_str(), true);  
}
0
ss1278ee
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 20
30.09.2016, 19:25  [ТС] #15
Объясни пожалуйста, что за 'LR'.
Компилятор засыпал ошибками в связи с этим.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2016, 19:25
Привет! Вот еще темы с ответами:

Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение? - C++
Ребята, помогите, пожалуйста. Вот, например, есть такой код: for (int i=0; i&lt;10; ++i) { /* здесь делается что-то полезное */...

Не могу разобраться как передать корректно передать массив из функции в функцию - C++
//--------------------------------------------------------------------------- #pragma hdrstop ...

Добавить новую переменную окружения с помощью SetEnvironmentVariable - C++
Имеется консольное приложение в многобайтовой кодировке #include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; int...

Записать каждое слово строки в новую переменную. - C++
Есть строка string в ней различные слова, нужно выводить по одному слову в другую строку string, вывести второй стринг cout - ом потом...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
30.09.2016, 19:25
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru