С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Юрий Ч
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 163
1

Предупреждение - ISO C++ forbids converting a string constant to 'char*'

06.03.2018, 17:34. Просмотров 1016. Ответов 7
Метки нет (Все метки)

Пишу в секции private класса статический член, компилируется нормально, но среда выдаёт предупреждение:

C++
1
2
3
4
class A {
    private:
        static constexpr char *m_pattern = "zxczxczxzc";
}
ISO C++ forbids converting a string constant to 'char*'

Что за предупреждение и как от него избавиться не знаю. Не подскажите?
Спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2018, 17:34
Ответы с готовыми решениями:

Исправить предупреждение deprecated conversion from string constant to 'char*'
Нужно вывести предложение без повторных вхождений слов. Нужно исправить...

Компилятор выдает предупреждение при инициализации строки:deprecated conversion from string constant to char*
#include <iostream> using namespace std; int main() { char *s="abcd";...

Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])
Почему компилятор на это матерится? ObjA.Show("A"); deprecated conversion...

Deprecated conversion from string constant to 'char*'
Подскажите,как записать чаровский массив и можно ли его вообще записать вроде:...

[Warning] deprecated conversion from string constant to 'char*'
Где ошибка?? #include<iostream> #include<windows.h> #include<ctime> using...

7
Kastaneda
Jesus loves me
Эксперт С++
4949 / 3026 / 347
Регистрация: 12.12.2009
Сообщений: 7,629
Записей в блоге: 2
Завершенные тесты: 1
06.03.2018, 17:36 2
должно быть const char*
0
Юрий Ч
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 163
06.03.2018, 17:42  [ТС] 3
Так и сделал. Но теперь нельзя писать так:

C++
1
static const char *m_pattern = "zxczxczxzc";
Инициализатор должен быть вынесен за класс, что не хотелось бы.
0
TRam_
зомбяк
790 / 725 / 232
Регистрация: 14.05.2017
Сообщений: 2,482
06.03.2018, 18:27 4
Цитата Сообщение от Юрий Ч Посмотреть сообщение
Инициализатор должен быть вынесен за класс
Это со всеми статическими полями надо делать:

При объявлении статического члена данных класса этот член не определяется. Вместо этого необходимо обеспечить для них глобальное определение вне класса. Это делается путем нового объявления статической переменной, причем используется оператор области видимости для того, чтобы идентифицировать тот класс, к которому принадлежит переменная. Это необходимо для того, чтобы под статическую переменную была выделена память.
Добавлено через 18 минут
C++
1
2
3
4
5
class A {
    private:
        static const char* m_pattern;
};
const char *A::m_pattern = "zxczxczxzc";
0
Юрий Ч
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 163
06.03.2018, 18:30  [ТС] 5
Спасибо большое! )
0
rat0r
4 / 52 / 10
Регистрация: 16.02.2018
Сообщений: 272
07.03.2018, 08:47 6
Цитата Сообщение от Юрий Ч Посмотреть сообщение
Инициализатор должен быть вынесен за класс, что не хотелось бы.
C++
1
2
3
4
class A {
    private:
        static constexpr const char *m_pattern = "zxczxczxzc";
};
0
Croessmah
++Ͻ
14777 / 8453 / 1605
Регистрация: 27.09.2012
Сообщений: 20,804
Записей в блоге: 2
Завершенные тесты: 1
07.03.2018, 13:10 7
TRam_, объявление static constexpr членов данных (а у ТС именно так) теперь является определением.
1
MrGluck
Модератор
Эксперт CЭксперт С++
8106 / 4958 / 1436
Регистрация: 29.11.2010
Сообщений: 13,454
07.03.2018, 14:15 8
Цитата Сообщение от Юрий Ч Посмотреть сообщение
Инициализатор должен быть вынесен за класс, что не хотелось бы.
Именно так и посчитали в комитете по стандартизации и начиная с С++17 так делать не обязательно
http://en.cppreference.com/w/cpp/language/constexpr

Вариант С++17
C++
1
2
3
4
class A
{
    static inline const char *m_pattern = "zxczxczxzc";
};
Но на самом деле, для const char* можно было бы и просто constexpr использовать
Вариант до С++17
C++
1
2
3
4
class A
{
    static constexpr const char *m_pattern = "zxczxczxzc";
};
0
07.03.2018, 14:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2018, 14:15

[Warning] deprecated conversion from string constant to 'char*'
В общем делаю классы, но не получается выводит ошибку. файл Selhoz.h...

Ошибка: deprecated conversion from string constant to ‘char*’
8,2.cpp: In function ‘int main()’: 8,2.cpp:31:12: warning: deprecated...

Инициализация графического драйвера: Deprecated conversion from string constant to 'char*'
В общем получил я некий код на компиляцию, но тут тонна ошибок. Кажется...


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

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

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