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

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

Войти
Регистрация
Восстановить пароль
 
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
#1

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

10.06.2012, 10:43. Просмотров 659. Ответов 14
Метки нет (Все метки)

Здравствуйте! У меня есть такой код:
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 () {
 
        }
};
компилироваться не хочет! Можете помочь мне разобраться, в чем тут дело?

Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2012, 10:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странные ошибки (C++):

Странные ошибки в c++ - C++
Добрый день! Помогите пожалуйста, что это за ошибки такие?Что можно сделать? П.5.18.Правил Запрещено размещать задания и решения в...

Странные ошибки. (corecrt_search.h) - C++
Здравствуйте. Хотел поинтересоваться, что значат эти ошибки, и каким способом их можно исправить/отключить, или на них можно вообще не...

Странные ошибки в функции - C++
#include <iostream> using namespace std; struct times { int hours; int minutes; int seconds; char...

Странные типы - C++
Всем добрый день. Хотелось бы узнать ответы на 2 вопроса: 1. Шаблонный тип - тип использующийся как шаблон для нескольких типов, а...

Странные ситуации - C++
У меня вот такая проблема. Если я компилирую и запускаю консольное приложение в visual studio 2010, с некоторой долей вероятности( ~5%),...

Странные символы - C++
Нужно заменить символ 'd' на символ 'в'. Сделал такой командой: "s1 = s1->Replace('d', 'в');", НО вместо 'в' показывается ¬. И так со...

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

C++
1
int *p;
1
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
11.06.2012, 16:03  [ТС] #7
Сапожок, понятно, спасибо!
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.06.2012, 17:03 #8
А в чем логика рассположения звездочки рядом с именем а не с типом?
Где это логично, кроме вот таких вот мест с объявлением нескольких перменных в одной строке, что считается плохим стилем и что лучше не использовать?
По мне, так логичнее звездочку расспологать рядом с int, потому что эта звездочка - это типообразующий символ и логично ее рассположить рядом с другими типообразующими символами (словами) и отделить тем самым от имени объекта этого типа. тип визуально отделен от имени имени объекта, что улучшает читабельность.
Хотелось бы услышать аргументы тех, кто исповедует такой стиль:
int *ptr;
int* const cptr; // как быть тут с логикой? куда помещать звездочку?
int *function();
0
soon
2542 / 1307 / 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;
}
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
11.06.2012, 17:13 #10
DU, если начнутся аргументы, то автоматически начнётся оффтоп и холивар.
 Комментарий модератора 
Если это произойдёт - закрою тему.
0
Bers
Заблокирован
12.06.2012, 00:45 #11
Цитата Сообщение от Сапожок Посмотреть сообщение
Советую вам при объявлении указателей ставить звездочку рядом с именем указателя, а не рядом с типом. Это логичнее и запутаться сложнее:
Не советую. Это не логично, и сбивает с толку.

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

Агрумент "мне так больше нравится" - это не аргумент. это субъективное предпочтение. никакой логики в этом нет, но если нравится - то ради бога. кодинг стайлы еще это могут диктовать без объяснений. тут тоже особо не по выбираешь. нужно следовать если требуют. Но если есть выбор,
то лучше себе как-то этот выбор попробовать объяснить.
"разных случаях - разные места (наверно имелись в виду способы)" - это имхо хуже, чем во всех случаях одинаково (есть лишь одно исключение, когда несколько переменных объявляют в одной строке).
Ну и самый большой плюс, когда звездочки и амперсенды сразу после имен типов - это отделение типа от имени объекта.
0
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
12.06.2012, 01:43 #14
Цитата Сообщение от DU Посмотреть сообщение
если священной войны не будет
Будет
Поскольку всплывший вопрос определённо холиварный, то правильнее всего было бы создать тему в соответствующем разделе (если её там ещё нет), а сюда закинуть ссылку.
0
silent_1991
12.06.2012, 11:07     Странные ошибки
  #15
 Комментарий модератора 
Как и обещал. Тем более, с вопросом уже разобрались.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2012, 11:07
Привет! Вот еще темы с ответами:

Странные символы в консоли с++ - C++
Доброго времени суток!Подскажите пожалуйста по одному вопросу. Столкнулся с символом мелодии в консоли : запустил, ввел данные и на экран...

цикл while,странные результат - C++
int main(){ long int l=0; short int s=0; cin>>l; cin>>s; const int max=65535; while(s<l&&l>0&&s<max) { ...

Странные результаты деления - C++
//Обнаружил странное исполнение функции деления в CodeBlocks 13.12 #include <iostream> #include <iomanip> #include <math.h> ...

Странные поведения с float - C++
Здравствуйте, объясните пожайлуста почему при выполеннии этого кода: #include <iostream> using namespace std; int main () { ...


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

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

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