С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
savera
0 / 0 / 0
Регистрация: 01.03.2016
Сообщений: 14
1

Ошибки "system" is ambiguous и identifier "_getch" is undefined

12.01.2017, 11:55. Просмотров 1058. Ответов 10

Здравствуйте! Нужна помощь с кодом. В чем заключаются ошибки и как их исправить, или чем заменить:? Подскажите, пожалуйста.

---main код---

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
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <ctype.h>
#include "add.h"
 
 
using namespace std;
 
char path[] = "test.txt";
mebel meb;
 
int main()
{
    
    char ch_key;
 
    bool bMENU = true;
    
    mebst open(std::string & test);
    do
    {
        cout << "***MENU***\n";
        cout << "1 - Add 1\n";
        cout << "2 - View 1\n";
        cout << "3 - Sort 1\n";
        cout << "ESC - Exit\n";
 
        switch (ch_key = _getch())
        {
        case '1':
        {
            {
                void write(mebst, mebel & record);
            }
        }
        break;
        case '2':
        {
            {
                mebel *read(mebst & store, mebel & buffer);
            }
        }
        break;
        case '3':
        {
            {
                mebel *find(mebst & store, std::string & name, mebel & buffer);
            }
        }
        break;
        case 27:
        {
            bMENU = false;
            cout << "Exit from program\n";
        }   break;
        }
        void close(mebst & store);
    } while (bMENU);
 
    system("pause");
    //return 0;
}
---add.h---

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
#pragma once
//ДОБАВЛЕНИЕ
 
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <ctype.h>
 
using namespace std;
 
#ifndef ADD_H
#define ADD_H
 
typedef struct mebel
{
    char name[12];
    int price, props, number;
} mebel, *meb;
 
typedef std::fstream mebst;
 
mebst open(std::string & test);
mebel *read(mebst & store, mebel & buffer);
 
void write(mebst, mebel & record);
 
mebel *find(mebst & store, std::string & name, mebel & buffer);
void close(mebst & store);
 
#endif // ADD_H
//
---sss.cpp---(исполняющий add.h)

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
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <ctype.h>
#include "add.h"
 
using namespace std;
 
mebst open(std::string & test)
{
    mebst store;
    store.open(test);
    store.seekp(0, std::ios_base::end);
    return store;
}
 
mebel * read(mebst & store, mebel & buffer) //чтение
{
    if (store.eof()) {
        return 0;
    }
    std::getline(store, buffer.name); //из файла
    store
        >> buffer.price
        >> buffer.props
        >> buffer.number;
    store.ignore(256, '\n');
    return &buffer;
}
 
void write(mebst & store, mebel & record) // запись
{
    store
        << record.name << std::endl
        << record.price << " "
        << record.props << " "
        << record.number << std::endl;
}
 
mebel * find(mebst & store, std::string & name, mebel & buffer) { //поиск
    while (read(store, buffer)) {
        if (buffer.name == name) {
            return &buffer;
        }
    }
    return 0;
}
void close(mebst & store) {
    store.close();
}
и что делать с "no instance of overloaded function "std::getline" matches the argument list" тоже не понимаю.
C++
1
std::getline(store, buffer.name);
Выручайте
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2017, 11:55
Ответы с готовыми решениями:

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить...

С++ консольное приложение win32, матерится на первое "pow" после "if", а на "system" говорит что неопределён.
#define _CRT_SECURE_NO_WARNINGS #include &quot;stdafx.h&quot; #include &lt;math.h&gt; ...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов),...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления"
Помогите с кодом написания задачи, не понимаю как написать классы в классе. ...

10
MrGluck
Модератор
Эксперт CЭксперт С++
8106 / 4958 / 1436
Регистрация: 29.11.2010
Сообщений: 13,454
12.01.2017, 12:09 2
C++
1
2
#include <cstdlib>
#include <conio.h>
1
savera
0 / 0 / 0
Регистрация: 01.03.2016
Сообщений: 14
12.01.2017, 14:20  [ТС] 3
Спасибо, но ошибка с std::getline осталась
0
MrGluck
Модератор
Эксперт CЭксперт С++
8106 / 4958 / 1436
Регистрация: 29.11.2010
Сообщений: 13,454
12.01.2017, 14:34 4
А если попробовать
C++
1
mebel * read(std::istream& store, mebel & buffer)
Добавлено через 20 секунд
Не забудьте поменять в объявлении и в определении.
1
likehood
981 / 826 / 395
Регистрация: 25.12.2016
Сообщений: 2,727
Завершенные тесты: 3
12.01.2017, 14:39 5
Второй параметр std::getline должен быть типа std::string, а ты передаёшь массив char. Предлагаю заменить char name[12] на std::string name.
1
savera
0 / 0 / 0
Регистрация: 01.03.2016
Сообщений: 14
12.01.2017, 16:32  [ТС] 6
Ничего не выходит. Ошибка та же no instance of overloaded function "std::getline arguments type are: (mebst, char[12])
При замене char name[12] на std::string name, ошибка такая no instance of overloaded function "std::getline arguments type are: (mebst, std::string [12]).
И появляется ошибка no operator "==" matches these operands в if (buffer.name == name).
Уже не могу что-то придумать...месяц уже борюсь со всей этой бодягой
Может есть другие способы устранить ошибку:?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8106 / 4958 / 1436
Регистрация: 29.11.2010
Сообщений: 13,454
12.01.2017, 16:38 7
Лучший ответ Сообщение было отмечено savera как решение

Решение

Цитата Сообщение от savera Посмотреть сообщение
no instance of overloaded function "std::getline arguments type are: (mebst, std::string [12]).
Вы сделали
C++
1
string name[12];
А надо было
C++
1
string name;
string по сути уже содержит в себе символьный массив.
1
likehood
981 / 826 / 395
Регистрация: 25.12.2016
Сообщений: 2,727
Завершенные тесты: 3
12.01.2017, 16:43 8
Цитата Сообщение от savera Посмотреть сообщение
ошибка такая no instance of overloaded function "std::getline arguments type are: (mebst, std::string [12]).
Откуда здесь string[12]? Как выглядит строка с этой ошибкой, и какой тип имеют аргументы getline?
0
savera
0 / 0 / 0
Регистрация: 01.03.2016
Сообщений: 14
12.01.2017, 17:18  [ТС] 9
MrGluck, спасибо большое. Все скомпилировалось)))
0
savera
0 / 0 / 0
Регистрация: 01.03.2016
Сообщений: 14
13.01.2017, 17:37  [ТС] 10
MrGluck, выручайте опять(
Программа открывает меню, но в меню ни один пункт не работает. Можете подсказать в чем проблема? Функции, вроде, объявлены правильно, могу и ошибаться.
0
Миниатюры
Ошибки "system" is ambiguous и identifier "_getch" is undefined  
MrGluck
Модератор
Эксперт CЭксперт С++
8106 / 4958 / 1436
Регистрация: 29.11.2010
Сообщений: 13,454
14.01.2017, 23:51 11
Вы зачем-то объявляете прототипы функций в case блоках, при этом добавляя локальный scope.
Это всё полный бред. Нужно вызывать соответствующие функции, передавая им список аргументов.

C++
1
2
3
void foo(const int x); // объявление прототипа функции, x - параметр
void foo(const int x) {} // реализация функции
foo(42); // вызов функции с аргументом 42
Добавлено через 40 секунд
Вам нужно прочитать литературу, вы не понимаете самые основы. Бессмысленно объяснять вам каждый элемент языка.
2
14.01.2017, 23:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2017, 23:51

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
Создать класс Книга поля: название книги,количество страниц,год издания...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата"
определить тип данных запись имеющий поля фамилия пол зарплата. определить...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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