почему я получаю ошибку и ...? - PullRequest
1 голос
/ 14 июля 2011

В моей программе я объявил функцию prototype вроде:

void callToPrint(LPTSTR , LPVOID , DWORD , string )

Но я получаю следующую ошибку из-за этого утверждения: error C2061: syntax error : identifier 'string'

Есть также другие ошибки в коде, которые говорят, что function не принимает 4 arguments.

(error C2660: 'callToPrint' : function does not take 4 arguments)

Почему я получаю этоошибка ?И как я могу их исправить?

Мой второй вопрос:

  • Я объявил переменную nameofPrinter типа LPTSTR, нокогда я пишу оператор getline( cin , nameOfPrinter ), отображается сообщение об ошибке: экземпляр перегруженной функции getline не соответствует списку аргументов.Тогда как я могу получить nameOfPrinter от пользователя?

Ответы [ 3 ]

3 голосов
/ 14 июля 2011

Ответ на первый вопрос:

error C2061: syntax error : identifier 'string'

Вам необходимо включить заголовочный файл string в заголовочный файл или исходный файл, в котором вы объявляете функцию, например:

 #include <string>

&

The namespace std; должны быть включены в ваш исходный файл как:

using namespace std;

Или В качестве альтернативы вы должны использовать:

std::string

Ответ на второй вопрос:

istream::getline() - функция класса istream со следующими перегруженными версиями:

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

Очевидно, что он не понимает ваш определенный тип LPTSTR, поэтому он сообщает, что нет соответствующего вызова функции, который принимает LPTSTR в качестве аргумента.

Как решить?
В комментариях @Cody Grey объясняется реальная проблема, и ее решение, конечно же, предлагается преобразовать LPTSTR в формат, чтобы он соответствовал параметру istream::getline(), что, в сущности, означает преобразование строки, имеющейся в wchar_t*. char* с помощью wcstombs ()

2 голосов
/ 14 июля 2011

Ваш файл должен содержать следующую строку:

#include <string>

Заголовочный файл string содержит определение класса string. Поскольку этот класс находится в пространстве имен std, прототип функции должен быть:

void callToPrint(LPTSTR , LPVOID , DWORD , std::string );

Поскольку вы используете LPTSTR в прототипе, вы должны использовать Visual C ++. Если ваш проект настроен на использование кодировки Unicode вместо набора многобайтовых символов, вам необходимо соответствующим образом адаптировать типы.

Для кодировки Unicode:

std::wstring nameOfPrinter;
std::getline( std::wcin , nameOfPrinter );

Или вы можете объявить тип ваших строк следующим образом:

std::basic_string<TCHAR> nameOfPrinter;

К сожалению, такого шаблонного класса не существует для переключения между cin и wcin. Так что вам придется прибегнуть к препроцессору.

#if defined(UNICODE) || defined(_UNICODE)
  #define _tcin wcin
#else
  #define _tcin cin
#endif

std::basic_string<TCHAR> nameOfPrinter;
std::getline( std::_tcin , nameOfPrinter );
0 голосов
/ 14 июля 2011

Но я получаю следующую ошибку из-за этого утверждения: ошибка C2061: синтаксическая ошибка: идентификатор 'строка'

Вам необходимо #include <string> и либо использовать using namespace std;, либо объявить string как std::string, чтобы использовать string класс.

отображаемая ошибка не является экземпляром перегруженной функции getline соответствует списку аргументов.

Второй параметр getline() является ссылкой на std::string. Очевидно, LPTSTR не std::string. Вместо этого используйте std::string.

Похоже, вы разрабатываете приложение с графическим интерфейсом. Почему вы берете ввод, используя cin?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...