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

Странные ошибки - C++

Восстановить пароль Регистрация
 
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
10.06.2012, 10:43     Странные ошибки #1
Здравствуйте! У меня есть такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class StringParser {
    private:
        char* str;
        char* seperators;
        int position;
    public:
        StringParser (char* newStr) {
            str = newStr;
            seperators = new char[1];
            seperators[0] = ',';
            position = 0;
        }
        char* getNextPart () {
 
        }
};
Он хорошо компилируется. Но вот такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class StringParser {
    private:
        char* str, seperators; // отличие только в том, что здесь я
                                              // два объявления сделал в одной строке через запятую
        int position;
    public:
        StringParser (char* newStr) {
            str = newStr;
            seperators = new char[1]; // ошибка появляется здесь
                                                            // говорит, "cannot convert (char*) to (char)"
                                                            // но ведь я объявил переменную seperators как переменную типа (char*)
            seperators[0] = ',';
            position = 0;
        }
        char* getNextPart () {
 
        }
};
компилироваться не хочет! Можете помочь мне разобраться, в чем тут дело?

Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2012, 10:43     Странные ошибки
Посмотрите здесь:

Странные ошибки в функции C++
цикл while,странные результат C++
C++ Странные типы
Странные цифры в консоле программы C++
Странные поведения с float C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
10.06.2012, 10:53     Странные ошибки #2
Цитата Сообщение от Hagrael Посмотреть сообщение
char* str, seperators;
C++
1
char *str, *seperators;
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
10.06.2012, 10:54     Странные ошибки #3
C++
1
char* str, seperators;
или
C++
1
char *str, *seperators;
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
10.06.2012, 11:03  [ТС]     Странные ошибки #4
Ах да, точно! Ведь звездочка относится не ко всем перечисляемым переменным, а только к одной! Спасибо!
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
11.06.2012, 13:55     Странные ошибки #5
dimcoder, расположение звёздочки не имеет значения. В первом случае указателем всё равно будет только str.
Сапожок
5 / 5 / 0
Регистрация: 17.04.2012
Сообщений: 34
11.06.2012, 14:55     Странные ошибки #6
Советую вам при объявлении указателей ставить звездочку рядом с именем указателя, а не рядом с типом. Это логичнее и запутаться сложнее:

C++
1
int *p;
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
11.06.2012, 16:03  [ТС]     Странные ошибки #7
Сапожок, понятно, спасибо!
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.06.2012, 17:03     Странные ошибки #8
А в чем логика рассположения звездочки рядом с именем а не с типом?
Где это логично, кроме вот таких вот мест с объявлением нескольких перменных в одной строке, что считается плохим стилем и что лучше не использовать?
По мне, так логичнее звездочку расспологать рядом с int, потому что эта звездочка - это типообразующий символ и логично ее рассположить рядом с другими типообразующими символами (словами) и отделить тем самым от имени объекта этого типа. тип визуально отделен от имени имени объекта, что улучшает читабельность.
Хотелось бы услышать аргументы тех, кто исповедует такой стиль:
int *ptr;
int* const cptr; // как быть тут с логикой? куда помещать звездочку?
int *function();
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.06.2012, 17:11     Странные ошибки #9
Цитата Сообщение от DU Посмотреть сообщение
А в чем логика рассположения звездочки рядом с именем а не с типом?
Мне так больше нравится. И все.

Цитата Сообщение от DU Посмотреть сообщение
int* const cptr; // как быть тут с логикой? куда помещать звездочку?
Не тот случай.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    int a;
    int b;
 
    int const *aPtr_one = &a;
    int *const aPtr_two = &a;
 
    //*aPtr_one = 4;    Compile error
    *aPtr_two = 4;
 
    aPtr_one = &b;
    //aPtr_two = &b;    Compile error
 
    return 0;
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
11.06.2012, 17:13     Странные ошибки #10
DU, если начнутся аргументы, то автоматически начнётся оффтоп и холивар.
 Комментарий модератора 
Если это произойдёт - закрою тему.
Bers
Заблокирован
12.06.2012, 00:45     Странные ошибки #11
Цитата Сообщение от Сапожок Посмотреть сообщение
Советую вам при объявлении указателей ставить звездочку рядом с именем указателя, а не рядом с типом. Это логичнее и запутаться сложнее:
Не советую. Это не логично, и сбивает с толку.

C++
1
char* name; //логичнее выделять, что есть тип, а что есть объект
Сапожок
5 / 5 / 0
Регистрация: 17.04.2012
Сообщений: 34
12.06.2012, 00:49     Странные ошибки #12
DU, В разных случаях - разные места. =)
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
12.06.2012, 01:31     Странные ошибки #13
Давайте не будет тут ругаться. если священной войны не будет, то все вроде как по правилам. + автор со своей проблемой разобрался, почему бы немного не свернуть от темы топика. никому от этого плохо не будет.

Агрумент "мне так больше нравится" - это не аргумент. это субъективное предпочтение. никакой логики в этом нет, но если нравится - то ради бога. кодинг стайлы еще это могут диктовать без объяснений. тут тоже особо не по выбираешь. нужно следовать если требуют. Но если есть выбор,
то лучше себе как-то этот выбор попробовать объяснить.
"разных случаях - разные места (наверно имелись в виду способы)" - это имхо хуже, чем во всех случаях одинаково (есть лишь одно исключение, когда несколько переменных объявляют в одной строке).
Ну и самый большой плюс, когда звездочки и амперсенды сразу после имен типов - это отделение типа от имени объекта.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
12.06.2012, 01:43     Странные ошибки #14
Цитата Сообщение от DU Посмотреть сообщение
если священной войны не будет
Будет
Поскольку всплывший вопрос определённо холиварный, то правильнее всего было бы создать тему в соответствующем разделе (если её там ещё нет), а сюда закинуть ссылку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2012, 11:07     Странные ошибки
Еще ссылки по теме:

Странные результаты деления C++
Странные ситуации C++
C++ Очень странные классы

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

Или воспользуйтесь поиском по форуму:
silent_1991
12.06.2012, 11:07     Странные ошибки
  #15
 Комментарий модератора 
Как и обещал. Тем более, с вопросом уже разобрались.
Yandex
Объявления
12.06.2012, 11:07     Странные ошибки
Закрытая тема Создать тему
Опции темы

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