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

Невозможно преобразовать параметр - C++

Восстановить пароль Регистрация
 
Digan
0 / 0 / 0
Регистрация: 17.05.2010
Сообщений: 12
17.05.2010, 17:26     Невозможно преобразовать параметр #1
Пишу сканер. Пока консольный, потом планирую перевести на форму. Все практически готово. Загвоздка только в следующем.
Никак не получается через scanf() передать имя проверяемого каталога.
Ближе к коду:
C++
1
2
3
4
PSTR *Path = new PSTR[256];
printf("Введите имя папки или диска >:");
scanf("%s",Path);
processPath(Path);
При компиляции возникает следующая ошибка:
error C2664: processPath: невозможно преобразовать параметр 1 из 'PSTR *' в 'PCSTR'
Код функции processPath():
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
void processPath(PCSTR Path)
{
    string SrcPath =Path;
    string File;
    File = Path;
    File +="\\*.*";
 
    WIN32_FIND_DATAA FindData;
    HANDLE hFind = FindFirstFileA(File.c_str(), &FindData);
 
    do
    {       //Пропускаем папки . и ..
        if(!strcmp(FindData.cFileName,".") || !strcmp(FindData.cFileName, ".."))
            continue;
 
        File = Path;
        File += "\\";
        File += FindData.cFileName;
 
        if((FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
        {
            processPath(File.c_str());
        }
        else
        {
            checkFile(File.c_str());
        }
 
    }
    while(FindNextFileA(hFind, &FindData));
}
Как можно преобразовать PSTR в PCSTR?
Я так понял PSTR это указатель на строку,а PCSTR это указатель на последовательность символов.
Может какие нибудь-другие варианты как передать в функцию processPath() параметр имени каталога через scanf() ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Maxim Prishchepa
Эксперт С++
 Аватар для Maxim Prishchepa
1761 / 984 / 60
Регистрация: 29.03.2010
Сообщений: 2,975
17.05.2010, 17:32     Невозможно преобразовать параметр #2
Цитата Сообщение от Digan Посмотреть сообщение
Пишу сканер. Пока консольный, потом планирую перевести на форму. Все практически готово. Загвоздка только в следующем.
Никак не получается через scanf() передать имя проверяемого каталога.
Ближе к коду:
C++
1
2
3
4
PSTR *Path = new PSTR[256];
printf("Введите имя папки или диска >:");
scanf("%s",Path);
processPath(Path);
При компиляции возникает следующая ошибка:

Код функции processPath():
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
void processPath(PCSTR Path)
{
    string SrcPath =Path;
    string File;
    File = Path;
    File +="\\*.*";
 
    WIN32_FIND_DATAA FindData;
    HANDLE hFind = FindFirstFileA(File.c_str(), &FindData);
 
    do
    {       //Пропускаем папки . и ..
        if(!strcmp(FindData.cFileName,".") || !strcmp(FindData.cFileName, ".."))
            continue;
 
        File = Path;
        File += "\\";
        File += FindData.cFileName;
 
        if((FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
        {
            processPath(File.c_str());
        }
        else
        {
            checkFile(File.c_str());
        }
 
    }
    while(FindNextFileA(hFind, &FindData));
}
Как можно преобразовать PSTR в PCSTR?
Я так понял PSTR это указатель на строку,а PCSTR это указатель на последовательность символов.
Может какие нибудь-другие варианты как передать в функцию processPath() параметр имени каталога через scanf() ?
может я конечно говорю банальные вещи, но вы можете объявить[QUOTE]PSTR *Path = new PSTR[256];/QUOTE] как
C++
1
PСSTR Path = new PСSTR[256];
? может быть поможет... ну или на оборот, в функцию передавать PSTR, вместо PCSTR... и ещё вопрос, а почему не пользоваться стандартным char* ?
Digan
0 / 0 / 0
Регистрация: 17.05.2010
Сообщений: 12
18.05.2010, 01:42  [ТС]     Невозможно преобразовать параметр #3
Если:
C++
1
PСSTR Path = new PСSTR[256];
То:
error C2440: инициализация: невозможно преобразовать 'PCSTR *' в 'PCSTR'
А если передавать PSTR, вместо PCSTR то в строке processPath(File.c_str());
error C2664: processPath: невозможно преобразовать параметр 1 из 'const char *' в 'PSTR'
И в строке processPath(Path);
error C2664: processPath: невозможно преобразовать параметр 1 из 'PSTR *' в 'PSTR'
и ещё вопрос, а почему не пользоваться стандартным char* ?
Да я бы рад использовать другие типы чтобы не путаться с этими указателями, но я переделываю один пример и там используются эти типы. Боюсь еще больше запутаться. Рад буду увидеть любые предложения как можно переписать код из первого поста со стандартными типами.
P.S. И еще маленький вопрос. Как подключать заголовочные файлы в приложении WindowsForms?
Обычная директива #include пораждает ошибку о синтаксической ошибке.

Добавлено через 5 часов 39 минут
Нашел решение. Выкладываю. Может кому пригодится.
C++
1
2
3
4
string Path;
printf("Введите имя папки или диска ");
getline(cin, Path);
processPath(Path);
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
void processPath(string Path)
{
    string File;
    File = Path;
    File +="\\*.*";
 
    WIN32_FIND_DATAA FindData;
    HANDLE hFind = FindFirstFileA(File.c_str(), &FindData);
 
    do
    {       //Пропускаем папки . и ..
        if(!strcmp(FindData.cFileName,".") || !strcmp(FindData.cFileName, ".."))
            continue;
 
        File = Path;
        File += "\\";
        File += FindData.cFileName;
 
                    // Папку сканируем рекурсивно
        if((FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
        {
            processPath(File.c_str());
        }
        else
        {
            checkFile(File.c_str());
        }
 
    }
    while(FindNextFileA(hFind, &FindData));
}
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
18.05.2010, 08:12     Невозможно преобразовать параметр #4
PCSTR - это константный PSTR, в этом вся разница, то есть:
PSTR - char *
PCSTR - const char *
Yandex
Объявления
18.05.2010, 08:12     Невозможно преобразовать параметр
Ответ Создать тему
Опции темы

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