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

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

06.03.2018, 17:34. Просмотров 410. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Предупреждение - ISO C++ forbids converting a string constant to 'char*' (C++):

Исправить предупреждение 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...

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

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

C++
1
static const char *m_pattern = "zxczxczxzc";
Инициализатор должен быть вынесен за класс, что не хотелось бы.
0
TRam_
зомбяк
604 / 609 / 192
Регистрация: 14.05.2017
Сообщений: 2,047
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 / 16
Регистрация: 16.05.2012
Сообщений: 157
06.03.2018, 18:30  [ТС] #5
Спасибо большое! )
0
rat0r
18 / 26 / 5
Регистрация: 16.02.2018
Сообщений: 197
07.03.2018, 08:47 #6
Цитата Сообщение от Юрий Ч Посмотреть сообщение
Инициализатор должен быть вынесен за класс, что не хотелось бы.
C++
1
2
3
4
class A {
    private:
        static constexpr const char *m_pattern = "zxczxczxzc";
};
0
Croessmah
++Ͻ
14161 / 8086 / 1513
Регистрация: 27.09.2012
Сообщений: 19,929
Записей в блоге: 3
Завершенные тесты: 1
07.03.2018, 13:10 #7
TRam_, объявление static constexpr членов данных (а у ТС именно так) теперь является определением.
1
MrGluck
Модератор
Эксперт CЭксперт С++
8023 / 4866 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
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
Привет! Вот еще темы с решениями:

Ошибка: 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*'
В общем получил я некий код на компиляцию, но тут тонна ошибок. Кажется...

ISO C++ forbids. error
#ifndef CPYRAMID_H #define CPYRAMID_H class cPoint3d { public: ...

ISO C++ forbids declaration of 'c' with no type
Компилятор выдает ошибку при выполнении данного кода, в чем ошибка? #include...


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

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

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