Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
le nom
4 / 4 / 0
Регистрация: 03.01.2009
Сообщений: 50
1

Конструктор структуры

11.10.2014, 17:40. Просмотров 4102. Ответов 10
Метки нет (Все метки)

Задание: сравнить строки функцией strcmp. Ошибка: error: cannot convert ‘String’ to ‘const char*’ for argument ‘2’ to ‘int strcmp(const char*, const char*)’

Подскажите пожалуйста - что здесь можно сделать?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstddef>
#include <cstring>
 
struct String {
    String(const char *str = "");
    ~String();
 
     int compare(String &str) {
     int rez = strcmp(this->str_, str);
     return rez;
    }
 
    char *str_;
};
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2014, 17:40
Ответы с готовыми решениями:

Конструктор структуры
Необходимо заполнить структуру : struct filmoteka { string name; string dir; int time;...

Просит конструктор структуры
на строку TFileHeader FileHeader; при struct TFileHeader { ... };.

Копировать пустую строку в const char* Конструктор структуры (класса)
Я думал, что это копирует в ch символ конца строки char *ch=new char; strcpy(ch,&quot;&quot;); delete...

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

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных...

10
0x10
2752 / 1849 / 313
Регистрация: 24.11.2012
Сообщений: 4,585
11.10.2014, 17:42 2
Второй аргумент strcmp должен быть типа const char*, а Вы что передаете?
0
le nom
4 / 4 / 0
Регистрация: 03.01.2009
Сообщений: 50
11.10.2014, 17:47  [ТС] 3
Т.е. нужно завести новую переменную типа const char и переписать туда str?
0
0x10
2752 / 1849 / 313
Регистрация: 24.11.2012
Сообщений: 4,585
11.10.2014, 17:50 4
Можно, конечно, сразу написать ответ, но в чем тут интерес. Попробуем добиться понимания.

Как Вы собираетесь реализовать то, что сами предлагаете?
0
11.10.2014, 17:50
le nom
4 / 4 / 0
Регистрация: 03.01.2009
Сообщений: 50
11.10.2014, 17:54  [ТС] 5
Почему-то так же возникает ошибка:
error: cannot convert ‘String’ to ‘const char*’ for argument ‘1’ to ‘size_t strlen(const char*)’
error: cannot convert ‘String’ to ‘const char*’ for argument ‘2’ to ‘char* strcpy(char*, const char*)’

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstddef>
#include <cstring>
 
struct String {
    String(const char *str = "");
    ~String();
 
     int compare(String &str) {
        size_t len = strlen(str);
        char* s = new char[len+1];
        strcpy(s, str)
     int rez = strcmp(this->str_, s);
     return rez;
    }
 
    char *str_;
};
0
0x10
2752 / 1849 / 313
Регистрация: 24.11.2012
Сообщений: 4,585
11.10.2014, 17:56 6
Цитата Сообщение от le nom Посмотреть сообщение
Почему-то так же возникает ошибка:
По абсолютно той же причине, по которой была в предыдущем случае.
Посмотрите как передаете первый аргумент в strcmp и сделайте по аналогии второй.
0
le nom
4 / 4 / 0
Регистрация: 03.01.2009
Сообщений: 50
11.10.2014, 18:00  [ТС] 7
error: ‘struct String’ has no member named ‘str’

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <cstddef>
#include <cstring>
 
struct String {
    String(const char *str = "");
    ~String();
 
     int compare(String &str) {
     int rez = strcmp(this->str_, this->str);
     return rez;
    }
 
    char *str_;
};
0
0x10
2752 / 1849 / 313
Регистрация: 24.11.2012
Сообщений: 4,585
11.10.2014, 18:03 8
Лучший ответ Сообщение было отмечено le nom как решение

Решение

Мимо.
this - указатель на объект, для которого вызывается метод String::compare. От него берется поле str_ в качестве первого аргумента для strcmp.
Второй аргумент нужно брать у, собственно, аргумента функции compare. Т.е. у объекта str нужно взять поле str_.
1
le nom
4 / 4 / 0
Регистрация: 03.01.2009
Сообщений: 50
11.10.2014, 18:28  [ТС] 9
error: base operand of ‘->’ has non-pointer type ‘String’

Добавлено через 7 минут
C++
1
2
int rez = strcmp(this->str_, str->str_);
     return rez;
0
0x10
2752 / 1849 / 313
Регистрация: 24.11.2012
Сообщений: 4,585
11.10.2014, 18:29 10
Цитата Сообщение от le nom Посмотреть сообщение
int rez = strcmp(this->str_, str->str_);
str - не указатель, поэтому для доступа к полям используется точка.
1
le nom
4 / 4 / 0
Регистрация: 03.01.2009
Сообщений: 50
11.10.2014, 18:35  [ТС] 11
Спасибо!
0
11.10.2014, 18:35
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2014, 18:35

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор)
class Test { int i; public: void test(int i) { this -&gt; i = i; } }; Конструктор...

Конструктор класса, конструктор копирования запускается не тот который нужен
Есть такой конструктор: Neuron::Neuron(int iType_activation_funk) { this-&gt;iType_act =...

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1)...


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

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

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