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

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

Войти
Регистрация
Восстановить пароль
 
6o6ep4ik
-9 / 0 / 0
Регистрация: 23.10.2015
Сообщений: 175
#1

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

27.03.2016, 12:35. Просмотров 248. Ответов 12
Метки нет (Все метки)

В ДЗ есть пример кода, помогите пожалуйста исправить, до работающего варианта (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;
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2016, 12:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при передаче параметра в функцию (C++):

Ошибка при передаче в функцию - C++
Хочу передать в функцию строку и там ее заполнить, подчеркивает void karta(MyStruct s.karta,int size); И пишет: 1 IntelliSense:...

Ошибка при передаче двумерного массива в функцию - C++
Помогите пожалуйста, никак не могу разобраться. Я хочу чтобы функция createBlankGameField() ввела данные в массив gameField созданный в...

Ошибка при передаче двумерного массива в функцию - C++
cannot convert 'int (*)' to 'int**' for argument '1' to 'void func(int**, int, int)' #include&lt;iostream&gt; using namespace std; ...

Ошибка при передаче в функцию указателя на элемент массива - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; #include &lt;cmath&gt; const int n = 20; int...

Ошибка при передаче двумерного массива в функцию std::thread - C++
Здравствуйте! Написал программу на потоки, теперь нужно передать туда двумерный массив. Пытаюсь передать по ссылке, но каждый раз...

Написать процедуру для суммирования матриц. Ошибка при передаче массива в функцию - C++
Помогите пожалуйста! Дано задание: Написать процедуру для суммирования матриц. С ее помощью сложить исходную матрицу и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nishen
342 / 180 / 68
Регистрация: 26.02.2015
Сообщений: 892
27.03.2016, 12:40 #2
Цитата Сообщение от 6o6ep4ik Посмотреть сообщение
(43) error C2065: i: необъявленный идентификатор
У тебя область видимости для переменной i заканчивается вот тут:

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

Не по теме:

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

SpBerkut
Объявлятель переменных
908 / 234 / 113
Регистрация: 24.09.2011
Сообщений: 875
Завершенные тесты: 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
-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 аргументов.
SpBerkut
Объявлятель переменных
908 / 234 / 113
Регистрация: 24.09.2011
Сообщений: 875
Завершенные тесты: 2
03.04.2016, 15:27 #13
Ясен перец. Переменная s в методе не объявлена ведь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2016, 15:27
Привет! Вот еще темы с ответами:

Использование указателя при передаче параметра - C++
Добрый вечер! Надо оформить функцию &quot;LoadTexture&quot;. Вот задачка: IDirect3DTexture9 *tex; LoadTexture(???tex); ... ...

Неверное значение при передаче параметра в метод operator= - C++
Здравствуйте. Есть код vector.h #pragma once //#include &quot;vector.h&quot;

Порча указателя при передаче в функцию - C++
Добрый вечер. Проблема такая - при передаче в функцию структуры, полем которой является указатель на указатель, последний портится....

Теряется строка при передаче в функцию - C++
Привет Замучался копать уже. Теряется строка при передаче её в функцию. Код такой: char* Read() { char str = &quot;1 2 3 4&quot;; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.04.2016, 15:27
Ответ Создать тему
Опции темы

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