Ошибка getline c

Kislorod1234

0 / 0 / 0

Регистрация: 15.05.2016

Сообщений: 12

1

02.02.2017, 19:04. Показов 15629. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Ругается на getline , пишет идентификатор не найден

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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <clocale>
 
int main()
{
    setlocale(LC_ALL, "rus");
    string  str1, str2, str;
    string  f_name1, f_name2;
    cout << "VV. name file 1 \n" << endl;
    getline (cin, f_name1);
    cout << "VV. name file 2 \n" << endl;;
    getline (cin, f_name2);
    ifstream f;
    f.open (f_name1, ios_base::in);
    ifstream g;
    g.open(f_name2, ios_base::in);
    int j = 0;
    while (!f.eof())
    {
        getline(f, str1, '\0');
        getline(g, str2, '\0');
        if (!Comp(str1, str2)) j=Put(str, str2,j);
    }
    f.close();
    g.close();
    //запись в файл
    system("pause");
    return 0;
}

Подскажите в чем проблема



0



zss

Модератор

Эксперт С++

13407 / 10517 / 6283

Регистрация: 18.12.2011

Сообщений: 28,074

02.02.2017, 19:28

2

Лучший ответ Сообщение было отмечено Kislorod1234 как решение

Решение

Нету

C++
1
#include <string>

а cstring Не надо

Да, и зачем Вам локализация, если русский текст не используете



1



0 / 0 / 0

Регистрация: 15.05.2016

Сообщений: 12

03.02.2017, 08:35

 [ТС]

3

Спасибо. Подскажите можно ли открыть файл для чтения и для записи в конец одновременно?

Добавлено через 31 минуту
Еще не могу понять почему ругается на cin.getline(f,str,’\0′); , я хочу дописать строку str в конец файла f



0



Модератор

Эксперт CЭксперт С++

5273 / 2361 / 342

Регистрация: 20.02.2013

Сообщений: 5,758

Записей в блоге: 20

03.02.2017, 09:19

4

 Комментарий модератора 
Kislorod1234, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункты 4.4 и 5.16.

.



0



Модератор

Эксперт С++

13407 / 10517 / 6283

Регистрация: 18.12.2011

Сообщений: 28,074

03.02.2017, 09:54

5

Цитата
Сообщение от Kislorod1234
Посмотреть сообщение

cin.getline(f,str,’\0′);

std::getline и istream::getline — это разные функции.
Читайте синтаксис в справке.
Кстати, она вызывается клавишей F1 (текстовый курсор должен стоять на том, о чем хотите получить справку).



0



I have looked at a few other questions regarding getline() not functioning, however most problems regarding the topic were due to the programmer not including the string header. I have the string header included however getline is still giving me error E0304 (which I have already looked into).

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
    char input[100];
    getline(cin, input);
    cout << input << endl;
}

asked Jul 27, 2019 at 3:19

William's user avatar

2

There are two forms of getline:

std::cin.getline(array, size); // reads into raw character array
getline(std::cin, string);     // reads into std::string

You should use a std::string instead of a raw character array:

#include <iostream>
#include <string>
#include <sstream>

int main()
{
    std::string input;
    getline(std::cin, input);
    std::cout << input << "\n";
}

answered Jul 27, 2019 at 3:32

L. F.'s user avatar

L. F.L. F.

19.5k8 gold badges49 silver badges82 bronze badges

The non-member getline only works with std::string. Use the std::istream member function getline for C-style strings:

std::cin.getline(input, sizeof(input));

O'Neil's user avatar

O’Neil

3,7904 gold badges16 silver badges30 bronze badges

answered Jul 27, 2019 at 3:23

eesiraed's user avatar

eesiraedeesiraed

4,6164 gold badges16 silver badges34 bronze badges

1

При работе с языком программирования С++ многие сталкиваются с различными ошибками. Одной из таких ошибок может быть сообщение «getline не определен». Эта ошибка возникает, когда компилятор не может найти определение функции getline().

Основной причиной возникновения ошибки «getline не определен» является неправильное подключение библиотеки iostream. Функция getline() является частью этой библиотеки и должна быть правильно подключена в программе. Если этого не произошло, компилятор не может найти определение функции и выдает ошибку.

Чтобы исправить эту ошибку, необходимо добавить следующую строку в начале программы:

#include <iostream>

Также следует убедиться, что в программе присутствует используется пространство имен std:

using namespace std;

После таких изменений, компилятор сможет найти определение функции getline() и ошибка будет устранена.

Как устранить ошибку «getline не определен» на C++?

Ошибка «getline не определен» может возникать, когда компилятор не может найти определение функции getline. Данная функция используется для считывания строки из стандартного ввода или файла. Чтобы решить эту проблему, необходимо включить заголовочный файл , который содержит определение функции getline.

Вот простой пример кода, который вызывает ошибку «getline не определен»:

«`c++

#include

int main() {

std::string line;

getline(std::cin, line);

return 0;

}

«`

Чтобы исправить данную ошибку, нужно добавить следующую строку перед вызовом функции getline:

«`c++

#include

#include

int main() {

std::string line;

std::getline(std::cin, line);

return 0;

}

«`

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

Обратите внимание, что для использования функции getline необходимо также захватить пространство имен std. Вы можете сделать это, добавив директиву using перед функцией main или явно указав пространство имен при вызове функции:

«`c++

#include

#include

using namespace std;

int main() {

string line;

getline(cin, line);

return 0;

}

«`

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

В заключение, чтобы исправить ошибку «getline не определен» на C++, включите заголовочный файл , добавьте заголовочный файл , захватите пространство имен std и явно указывайте пространство имен при вызове функции getline.

Содержание

  1. Причины проблемы с использованием getline
  2. Решение 1: Проверьте наличие директивы #include
  3. Решение 2: Проверьте правильность использования пространства имен std
  4. Решение 3: Проверьте правильность записи входных данных
  5. Решение 4: Используйте альтернативные методы для чтения строк

Причины проблемы с использованием getline

Ошибка «getline не определен» может возникать по разным причинам при использовании функции getline в C++. Рассмотрим наиболее распространенные причины проблемы и возможные решения.

  1. Отсутствие подключения необходимых библиотек

    Одной из возможных причин ошибки «getline не определен» может быть отсутствие подключения нужных библиотек. Функция getline определена в библиотеке , поэтому убедитесь, что эта библиотека добавлена в вашем коде.

    Пример:

    #include <iostream>
    // ...
    
    
  2. Несоответствие версии компилятора

    Другой возможной причиной ошибки может быть несоответствие версии вашего компилятора совместимости с функцией getline. В некоторых старых версиях компиляторов функция getline может быть не поддерживается.

    В этом случае вам необходимо обновить компилятор или использовать другую функцию для чтения строк из ввода.

  3. Неправильное использование функции getline

    Если вы всё еще сталкиваетесь с ошибкой, возможно, причина кроется в неправильном использовании функции getline.

    У функции getline существуют разные перегрузки, которые могут отличаться по параметрам. Убедитесь, что вы правильно указываете все необходимые параметры при вызове функции.

    Пример:

    std::string line;
    std::getline(std::cin, line); // Правильно
    
    
    std::string line;
    std::getline(std::cin, line, '
    '); // Правильно
    
    
    std::string line;
    std::getline(std::cin); // Неправильно, здесь не указан второй параметр - символ-разделитель
    
    

Если вы продолжаете сталкиваться с ошибкой «getline не определен» после проверки и решения этих проблем, рекомендуется обратиться к официальной документации вашего компилятора или поискать помощь на специализированных форумах и ресурсах для программистов.

Решение 1: Проверьте наличие директивы #include

Одной из причин возникновения ошибки «getline не определен» может быть отсутствие необходимой директивы #include в вашем коде на языке C++. Директива #include используется для подключения стандартной библиотеки языка, в которой определена функция getline.

Для исправления этой ошибки вам необходимо добавить следующую директиву #include в начало вашего кода:

#include <iostream>

Данная директива подключает библиотеку iostream, которая содержит определение функции getline. Таким образом, после добавления этой директивы в ваш код, функция getline станет доступной для использования.

Пример:

#include <iostream>
int main() {
std::string line;
std::getline(std::cin, line);
std::cout << line << std::endl;
return 0;
}

В данном примере после добавления директивы #include <iostream> функция getline будет корректно определена и данная ошибка больше не будет возникать при компиляции и выполнении кода.

Решение 2: Проверьте правильность использования пространства имен std

Еще одна причина ошибки «getline не определен» может быть связана с неправильным использованием пространства имен std. В стандартной библиотеке языка C++, функция getline находится в пространстве имен std. Это означает, что для правильного использования функции нужно указывать префикс std:: перед названием функции.

Вот пример правильного использования функции getline:

  1. Включите заголовочный файл iostream:

#include <iostream>

  1. Используйте префикс std:: перед названием функции getline:

std::getline(std::cin, variableName);

Где variableName — это переменная, в которую вы хотите сохранить введенную строку.

Если вы забыли указать префикс std:: или использовали другое пространство имен, компилятор не сможет найти функцию getline и выдаст ошибку «getline не определен». В таком случае, убедитесь, что вы правильно указываете пространство имен std.

Используя правильное пространство имен и правильный синтаксис, вы сможете избежать ошибки «getline не определен» и успешно использовать функцию считывания строки в своей программе на C++.

Решение 3: Проверьте правильность записи входных данных

Еще одной возможной причиной ошибки «getline не определен» может быть неправильное использование функции getline() при чтении входных данных. Проверьте, что вы правильно указали аргументы функции и что используете нужные заголовочные файлы.

Некоторые распространенные ошибки, которые могут привести к этой проблеме:

  • Необходимо включить заголовочный файл для использования функции getline().
  • Вы можете использовать функцию getline() только с обьектами типа std::string, поэтому убедитесь, что вы правильно объявили и инициализировали переменную, с которой планируете использовать функцию getline().
  • У функции getline() есть два аргумента: первый — входной поток, из которого вычитываются данные, второй — переменная типа std::string, в которую сохраняются считанные данные. Убедитесь, что вы правильно указали оба аргумента.
  • Проверьте, что вы не перепутали порядок аргументов функции getline().

Если после проверки приведенных выше пунктов ошибка все еще возникает, возможно, проблема связана с другими аспектами вашего кода. Рекомендуется более подробно изучить код и поискать другие потенциальные проблемы.

Решение 4: Используйте альтернативные методы для чтения строк

Если вам не доступна функция getline() из стандартной библиотеки C++, вы можете воспользоваться альтернативными методами для чтения строк:

  1. Используйте функцию fgets():
  2. Функция fgets() позволяет считывать строки из файла или стандартного ввода. Пример использования:

    #include <cstdio>
    int main() {
    char buffer[256];
    fgets(buffer, sizeof(buffer), stdin);
    printf("%s", buffer);
    return 0;
    }
  3. Используйте функции cin.get() и cin.getline():
  4. Эти функции позволяют считывать строки из стандартного потока ввода cin. Пример использования:

    #include <iostream>
    int main() {
    char buffer[256];
    std::cin.getline(buffer, sizeof(buffer));
    std::cout << buffer << std::endl;
    return 0;
    }
  5. Используйте функции scanf() или fscanf():
  6. Функции scanf() и fscanf() также позволяют считывать строки из стандартного ввода или файла. Пример использования:

    #include <cstdio>
    int main() {
    char buffer[256];
    scanf("%s", buffer);
    printf("%s", buffer);
    return 0;
    }

Выберите подходящий для вас метод чтения строк, основываясь на требованиях вашей задачи и доступных инструментах.

У меня проблема с getline(),
Я пробовал много примеров и читал другие решения, но это не решило мою проблему. У меня еще есть информация 'getline: identifier not found',
я включен
<stdio.h> <tchar.h> <iostream> <conio.h> <stdlib.h> <fstream> и до сих пор ничего.

#include "stdafx.h"
using namespace std;

int main(int argc, _TCHAR* argv[])

{

string line;
getline(cin, line);
cout << "You entered: " << line << endl;

}

Что мне нужно сделать сейчас? Я использую Win7 64bit, MSVS2013.

1

Решение

Привыкнуть просто чтение документации для языковых функций, которые вы используете.
Соотношение совершенно ясно, что std::getline может найти в string,

#include <string>

8

Другие решения

Это должно исправить это:

#include "stdafx.h"#include <iostream>
#include <string>

using namespace std;

int main(int argc, _TCHAR* argv[]){
string line;
getline(cin, line);
cout << "You entered: " << line << endl;
}

5

#include "stdafx.h"#include <iostream>
#include <string>
using namespace std;
int main(int argc, _TCHAR* argv[]){
string line;
/*To consume the whitespace or newline between the end of a token and the
beginning of the next line*/

// eat whitespace
getline(cin >> ws, line);
cout << "You entered: " << line << endl;
}

0

#include <string>

Кстати, в учебнике «Программирование С ++» Мурача ошибочно говорится, что getline () находится в заголовке iostream (стр. 71), что может привести к некоторой путанице.

0

See more:

hi
i am try to read from a text file line by line and so i try to use getline() function

#include <iostream.h>
#include <conio>
#include <string>
#include <fstream.h>
//using namespace std;
using namespace std;
void main()
{
  ifstream inFile("t.txt");
  string line;
  if(inFile.fail())
   {
     cout<<"Error hapen when trying to open the file"<<endl;
   }
   else
   {
    while(!inFile.eof())
     {
       getline(inFile,line);
       cout << "> " << line << endl;
     }
   }

   getch();
}

unfortunately i get an error
the error is:
Error: scheduler.cpp(17,26):Could not find a match for ‘std::getline(ifstream,std::basic_string<char,std::string_char_traits<char>,std::allocator<char>>)’

[edit]Code block added, «Ignore HTML…» option deselected — OriginalGriff[/edit]
[edit]Proper HTML entity used as <> — Emilio[/edit]

Comments


Solution 1

Your #includes are wrong

They should be

#include <iostream>
#include <conio.h>
#include <string>
#include <fstream>

Comments

Solution 2

Andrew is right. Remove .h from fstream.h and iostream.h. And conio is not necessary I think, you may remove it.

#include <iostream>
#include <string>
#include <fstream>

Comments

Solution 3

still learning here, I use char line[X] where X is the length of the string. I dont know the string entity yet. Anyway, to the point,

infile.getline(line,X);  


infile being the stream object; getline() the method; line being your string to fill; and X being the max length of the string; perhaps with string object, X can be replaced with (strlen(line)) ??
if there is another prototype, I am unaware of it.

if I am in error, hopefully someone will correct me quickly. :)

Updated 22-Feb-11 15:21pm

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

 

Print

Answers RSS

Top Experts
Last 24hrs This month

CodeProject,
20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8
+1 (416) 849-8900

Понравилась статья? Поделить с друзьями:
  • Ошибка error load settings как исправить
  • Ошибка ip адреса доменного имени
  • Ошибка getdeviceremovedreason battlefield 4
  • Ошибка is not a valid win32 application
  • Ошибка ip адреса виндовс