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

Ошибка при передаче параметра в функцию - C++

Восстановить пароль Регистрация
 
6o6ep4ik
 Аватар для 6o6ep4ik
-9 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 175
27.03.2016, 12:35     Ошибка при передаче параметра в функцию #1
В ДЗ есть пример кода, помогите пожалуйста исправить, до работающего варианта (VS2015).
Ошибки: (32) error C2660: strcpy_s: функция не принимает 2 аргументов
(43) error C2065: i: необъявленный идентификатор
(54) error C2660: strcpy_s: функция не принимает 2 аргументов
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <istream>
#define SIZE 255
using namespace std;
 
class X {
    char *str;
    char *str_return;
public:
    X(); //конструктор по-умолчанию
    X(char*); //конструктор, которому можно передавать параметр
    ~X(); //деструктор
    char* Run(); //метод, выполняющий поставленную задачу. 
    void Set(char*);
    friend void print(X&); //функция-друг печати
    friend ostream& operator<<(ostream&, X&); //перегрузка оператора вывода
    friend istream& operator>>(istream&, X&); //перегрузка оператора ввода
    friend char* Run(X&); //функция-друг, выполняющий поставленную задачу. 
};
 
X::X() {
    str = new char[SIZE];
    str[0] = '\0';
    str_return = new char[SIZE];
    str_return[0] = '\0';
};
X::X(char *s) {
    str = new char[SIZE];
    strcpy_s(str, s);
    str_return = new char[SIZE];
    str_return[0] = '\0';
};
X::~X() {
    delete[] str;
    cout << "...destructor has been called" << endl;
};
void X::Set(char* s) {
    for (unsigned int i = 0; i<strlen(s); i++)
        str[i] = s[i];
    str[i] = '\0';
};
char* X::Run() { /*метод, решающий конкретную задачу, в данном случае - выделение из строки подстроки, не содержащей заглавных латинских букв, если длина исходной строки меньше 10*/
    int j = 0;
    if (strlen(str)<10) {
        for (unsigned int i = 0; i<strlen(str); i++)
            if (((int)str[i]<65) || ((int)str[i]>90)) {
                str_return[j] = str[i]; j++;
            };
        str_return[j] = '\0';
    }
    else strcpy_s(str_return, str);
 
    return str_return;
};
char* Run(X &obj) { return obj.Run(); };
void print(X &obj) { cout << obj.str << " " << obj.str_return << endl; };
ostream& operator<<(ostream &stream, X &ob) {
    stream << ob.str;
    return stream;
};
istream &operator>>(istream &stream, X &ob) {
    stream >> ob.str;
    return stream;
};
 
void main(void) {
    char s[265];
 
    cout << "Type anything and press "Enter":" << endl;
    cin.getline(s, 256); //считываем полностью всю строку
    X str(s); //доступ к методам класса непосредственно через переменную,
              //начальное значение устанавливаем через конструктор
    cout << "You have type:" << endl;
    print(str);
    cout << "Output string:" << endl;
    cout << Run(str) << endl;
    cout << "Type anything and press "Enter":" << endl;
    cin.getline(s, 256);
    X *pstr; //доступ к методам класса через указатель
    pstr = new X();
    pstr->Set(s);
    cout << "You have type:" << endl;
    print(*pstr);
    cout << "Output string:" << endl;
    cout << Run(*pstr) << endl;
    delete pstr;
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nishen
 Аватар для Nishen
172 / 78 / 28
Регистрация: 26.02.2015
Сообщений: 465
27.03.2016, 12:40     Ошибка при передаче параметра в функцию #2
Цитата Сообщение от 6o6ep4ik Посмотреть сообщение
(43) error C2065: i: необъявленный идентификатор
У тебя область видимости для переменной i заканчивается вот тут:

Цитата Сообщение от 6o6ep4ik Посмотреть сообщение
str[i] = s[i];
т.е. переменная видна только в цикле, а не во всём блоке, описывающим функцию.
SpBerkut
Объявлятель переменных
 Аватар для SpBerkut
905 / 231 / 113
Регистрация: 24.09.2011
Сообщений: 874
Завершенные тесты: 2
27.03.2016, 12:41     Ошибка при передаче параметра в функцию #3
strcpy_s требует трёх аргументов.
А в 43-й строке используется переменная, объявленная в теле цикла. Объявите её перед циклом.
Nishen
 Аватар для Nishen
172 / 78 / 28
Регистрация: 26.02.2015
Сообщений: 465
27.03.2016, 12:41     Ошибка при передаче параметра в функцию #4
Цитата Сообщение от 6o6ep4ik Посмотреть сообщение
Ошибки: (32) error C2660: strcpy_s: функция не принимает 2 аргументов
Цитата Сообщение от 6o6ep4ik Посмотреть сообщение
(54) error C2660: strcpy_s: функция не принимает 2 аргументов
Использование strcpy_s
6o6ep4ik
 Аватар для 6o6ep4ik
-9 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 175
28.03.2016, 19:36  [ТС]     Ошибка при передаче параметра в функцию #5
Nishen, SpBerkut, это, конечно, всё хорошо... но как исправить то?! Я не понимаю... Как разобраться?
Nishen
 Аватар для Nishen
172 / 78 / 28
Регистрация: 26.02.2015
Сообщений: 465
28.03.2016, 20:40     Ошибка при передаче параметра в функцию #6
Цитата Сообщение от 6o6ep4ik Посмотреть сообщение
Я не понимаю...
Ты разбираешься в указателях и ссылках, в массивах и т.д. (судя по коду), но не можешь разобраться в описанных ошибках?
6o6ep4ik
 Аватар для 6o6ep4ik
-9 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 175
28.03.2016, 20:42  [ТС]     Ошибка при передаче параметра в функцию #7
Nishen, так я же написал:
Цитата Сообщение от 6o6ep4ik Посмотреть сообщение
В ДЗ есть пример кода
Это пример (писал не я, его сунули нам в дз). Вот, что Вы написали
Цитата Сообщение от Nishen Посмотреть сообщение
указателях и ссылках, в массивах
с этим как раз и проблемы. Что толкового читануть, где всё это разжевывается как для умственно отсталого?
Nishen
 Аватар для Nishen
172 / 78 / 28
Регистрация: 26.02.2015
Сообщений: 465
28.03.2016, 21:58     Ошибка при передаче параметра в функцию #8
Цитата Сообщение от 6o6ep4ik Посмотреть сообщение
Что толкового читануть
Литература C++
Вот тут можешь найти списки литературы. Как определишься с книгой - можешь поискать отзывы о ней и решить, подходит она тебе или нет. Обычно советуют Липпмана, Страуструпа или Дейтелу. Мне нравится Р. Лафоре еще.
6o6ep4ik
 Аватар для 6o6ep4ik
-9 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 175
28.03.2016, 21:59  [ТС]     Ошибка при передаче параметра в функцию #9
Nishen, есть у меня Лафоре. Не особо там расписано (имхо)
Nishen
28.03.2016, 22:06
  #10

Не по теме:

Цитата Сообщение от 6o6ep4ik Посмотреть сообщение
имхо
На вкус и цвет...

SpBerkut
Объявлятель переменных
 Аватар для SpBerkut
905 / 231 / 113
Регистрация: 24.09.2011
Сообщений: 874
Завершенные тесты: 2
29.03.2016, 04:24     Ошибка при передаче параметра в функцию #11
Второй вопрос решится так.
C++
1
2
3
4
5
6
void X::Set(char* s) {
    unsigned int i = 0;
    for (; i<strlen(s); i++)
        str[i] = s[i];
    str[++i] = '\0';
};
А первый и третий — так.
C++
1
strcpy_s(str, strlen(s), s);
6o6ep4ik
 Аватар для 6o6ep4ik
-9 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 175
03.04.2016, 15:19  [ТС]     Ошибка при передаче параметра в функцию #12
SpBerkut, эти ошибки исправились, спасибо.
Теперь в 55 строке если записать
C++
1
else strcpy_s(str_return, strlen(s), s);
выдает ошибку:идентификатор "s" не определен, C2660 strcpy_s: функция не принимает 2 аргументов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2016, 15:27     Ошибка при передаче параметра в функцию
Еще ссылки по теме:

Написать процедуру для суммирования матриц. Ошибка при передаче массива в функцию C++
C++ Ошибки преобразования при передаче указателя на функцию
C++ Ошибка при передаче двумерного массива в функцию

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

Или воспользуйтесь поиском по форуму:
SpBerkut
Объявлятель переменных
 Аватар для SpBerkut
905 / 231 / 113
Регистрация: 24.09.2011
Сообщений: 874
Завершенные тесты: 2
03.04.2016, 15:27     Ошибка при передаче параметра в функцию #13
Ясен перец. Переменная s в методе не объявлена ведь.
Yandex
Объявления
03.04.2016, 15:27     Ошибка при передаче параметра в функцию
Ответ Создать тему
Опции темы

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