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

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

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

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

17.05.2010, 17:26. Просмотров 698. Ответов 3
Метки нет (Все метки)

Пишу сканер. Пока консольный, потом планирую перевести на форму. Все практически готово. Загвоздка только в следующем.
Никак не получается через 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() ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2010, 17:26     Невозможно преобразовать параметр
Посмотрите здесь:

невозможно преобразовать параметр - C++
Добрый день. Имеется такой код для поиска и замены в РичТекстБокс: private: System::Void button5_Click(System::Object^ sender,...

error C2664: невозможно преобразовать параметр - C++
Здравствуйте. Отправьте меня если что в другую тему, где это обсуждалось, но я не понимаю, в чем собственно дело void grouping(int n,...

error C2664:невозможно преобразовать параметр - C++
/*************************************************** * Программа: Квадратный трехчлен * * Лаб. работа: 5 ...

error C2664:невозможно преобразовать параметр - C++
#include "stdafx.h" #include <iostream> using namespace std; #include <cstring> #define q 250 struct sanat{ string Name; ...

fscanf: невозможно преобразовать параметр 1 из 'char [40]' в 'FILE *' - C++
Организовываю файл данных со структурой, и выдает такую ошибку еrror C2664: fscanf: невозможно преобразовать параметр 1 из 'char ' в 'FILE...

Невозможно преобразовать параметр из int в const char - C++
Приветствую, помогите пожалуйста исправить следующую ошибку: printf: невозможно преобразовать параметр 1 из "int" в "const char *" Хотя...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Maxim Prishchepa
Эксперт С++
1920 / 1032 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
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));
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2010, 08:12     Невозможно преобразовать параметр
Еще ссылки по теме:

Невозможно преобразовать параметр 1 из 'const char [15]' в 'LPCWSTR' - C++
с сайта скачала прогу которая должна рисовать сферу, но при компилировании выходит ошибка:error C2664: auxInitWindowW: невозможно...

Fopen: невозможно преобразовать параметр 1 из 'LPWSTR' в 'const char *' - C++
#include "stdafx.h" #include <windows.h> #include<cstdio> #include<io.h> int APIENTRY WinMain(HINSTANCE hInst,HINSTANCE...

Ошибка при работе с dll - невозможно преобразовать параметр - C++
пишу прогу, функции передаются с dll, выдает ошибку в строке HINSTANCE mydll = LoadLibrary ("my_dll.dll"); error C2664: LoadLibraryW:...

error C2664: itoa: невозможно преобразовать параметр 1 из 'int *' в 'int' + запись в файл - C++
Подскажите пожалуйста как быть... в конструктор приходит *int и мне нужно создать файл, с именем таким же, что и значение, которое приходит...

Невозможно преобразовать параметр 1 из 'int [9]' в 'int' - C++
Что не так в коде? #include <iostream> #include <string> using namespace std; const int MAX = 9; int maxint(int); int main() ...

невозможно преобразовать параметр 1 из "int" в "int *&" - C++
#include <iostream> using namespace std; void Func1(int *n) { cout << *n << " = " << *n << endl; } void Func2(int &n) ...


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

Или воспользуйтесь поиском по форуму:
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
18.05.2010, 08:12     Невозможно преобразовать параметр #4
PCSTR - это константный PSTR, в этом вся разница, то есть:
PSTR - char *
PCSTR - const char *
Yandex
Объявления
18.05.2010, 08:12     Невозможно преобразовать параметр
Ответ Создать тему
Опции темы

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