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

Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.80
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
02.01.2013, 19:37     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #1
Почему компилятор на это матерится?
C++
1
ObjA.Show("A");
[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class kooClass {
    int x,y,z;
public:
    kooClass(){x=y=z=0; }
    kooClass(int a,int b,int c) { x=a;y=b;z=c;}
    kooClass operator+(kooClass);
    kooClass operator=(kooClass);
    void Show(char*);
};
 
kooClass kooClass::operator+(kooClass obj){
    kooClass tmp;
    tmp.x=x+obj.x;
    tmp.y=y+obj.y;
    tmp.z=z+obj.z;
    
    return tmp;
}
 
kooClass kooClass::operator=(kooClass obj){
    x=obj.x;
    y=obj.y;
    z=obj.z;
    
    return *this;
}
 
void kooClass::Show(char*s){
    cout<<"<"<<s<<">";
    cout<<"\t\tX = "<<x<<",Y = "<<y<<",Z = "<<z<<endl;
}
 
int main()
{
    kooClass ObjA(1,2,3),ObjB(10,10,10),ObjC;
    
    ObjA.Show("A");
    ObjB.Show("B");
    
    ObjC=ObjA+ObjB;
    ObjC.Show("C=A+B");
    
    ObjC=ObjA+ObjB+ObjC;
    ObjC.Show("C=A+B+C");
    
    ObjC=ObjB=ObjA;
    ObjC.Show("B=A");
    ObjC.Show("C=B");
    
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2013, 19:37     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])
Посмотрите здесь:

Как избавиться от "deprecated conversion from string constant to ‘char*’" C++
invalid conversion from ‘char’ to ‘const char*’ C++
C++ ошибка:20 invalid conversion from `char*' to `char'
invalid conversion from 'const char*' to 'char' C++
Ошибка invalid conversion from 'const char*' to 'char*' C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
02.01.2013, 19:39     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #2
tokar2, попробуй
Цитата Сообщение от tokar2 Посмотреть сообщение
void kooClass::Show(const char*s){
(проект пока не компилил, возможно есть и другие недочёты)
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
02.01.2013, 19:40     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #3
C++
1
void Show(const char*)
-=ЮрА=-
Заблокирован
Автор FAQ
02.01.2013, 19:45     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #4
tokar2, вот твой код который соответвует стандарту
http://codepad.org/GVfyZlZ4
<A> X = 1,Y = 2,Z = 3
<B> X = 10,Y = 10,Z = 10
<C=A+B> X = 11,Y = 12,Z = 13
<C=A+B+C> X = 22,Y = 24,Z = 26
<B=A> X = 1,Y = 2,Z = 3
<C=B> X = 1,Y = 2,Z = 3
-=ЮрА=-
02.01.2013, 19:46
  #5

Не по теме:

DELDELDEL

Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.01.2013, 19:47     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #6
Цитата Сообщение от tokar2 Посмотреть сообщение
Почему компилятор на это матерится?
потому что "A" имеет тип const char[2] который неявно преобразовывается в const char*, вот компилятор и обалдевает от того что вы пытаетесь лишить строковый литерал константности
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
02.01.2013, 19:49  [ТС]     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #7
Не работает почему-то! У меня наверное компилятор накрылся)
-=ЮрА=-
Заблокирован
Автор FAQ
02.01.2013, 19:52     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #8
Цитата Сообщение от Jupiter Посмотреть сообщение
потому что "A" имеет тип const char[2] который неявно преобразовывается в const char*, вот компилятор и обалдевает от того что вы пытаетесь лишить строковый литерал константности
tokar2, поэтому иногда компилятору нужно подсказывать как преобразовывать результат операции
http://codepad.org/4zEVzqr2
Т.е можно было не меняя прототипа Show просто организовывать явное преобразование
Вот так
C++
1
ObjC.Show((char *)"C=A+B");
Добавлено через 43 секунды

Не по теме:

Цитата Сообщение от tokar2 Посмотреть сообщение
Не работает почему-то! У меня наверное компилятор накрылся)
- показывай скриншот, назови компилятор, твой код рабочий - codepad врать не будет...

tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
02.01.2013, 19:53  [ТС]     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #9
Вот такое выбивает!
Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])
-=ЮрА=-
Заблокирован
Автор FAQ
02.01.2013, 19:58     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #10
tokar2, компилятор какой?Когда проект линкуешь жми Перестроить проект(Rebuild) вместо Построить(Build)

Добавлено через 1 минуту

Не по теме:

Скрин толком ничего не сказал, мне IDE надо. Также по надписи Could not Create Process можно положить что уже есть запущенная копия приложения и компилятор не имеет возможности пересобрать exe

Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.01.2013, 19:58     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
поэтому иногда компилятору нужно подсказывать как...
поэтому иногда программисту нужно включать думалку, метод Show не изменяет содержимое указателя а потому указатель должен быть указателем на константу
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
02.01.2013, 20:00  [ТС]     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #12
Это все-таки компилятор! Компилював ранее в Dev c++ и не работало, перешел в visual 2010 заработало!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
02.01.2013, 20:04     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #13
Цитата Сообщение от tokar2 Посмотреть сообщение
Компилював ранее в Dev c++ и не работало
Возможно, проблема в "Мои документы". Вроде как Dev C++ недолюбливает кириллицу
-=ЮрА=-
Заблокирован
Автор FAQ
02.01.2013, 20:20     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #14
Цитата Сообщение от Jupiter Посмотреть сообщение
поэтому иногда программисту
- именно! Если бы явное преобразование было некорректно кодпад просто бы не слинковал либо выдал некорректную отработку.
Стало быть (int)3.5/2 тоже будет некорректно (Вариант INT_MAX не рассматриваем...)?))))
http://codepad.org/MDVT372v

Добавлено через 1 минуту

Не по теме:

Jupiter, ещё раз выставишь минус - тебя будут миносовать здесь до упокоя! Ты ответь за свои слова. Я тебя предупредил...



Добавлено через 13 минут
Jupiter, вобщем спасибо за то что показал свои незнания по поводу явных преобразований...
Умение аргументировать свой ответ - это достойно профессионала, кроме твоей точки зрения я ничего не увидел!
Лично для тебя в качестве ликбеза http://ad.cctpu.edu.ru/cpp/glava15_1.htm
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.01.2013, 20:25     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- именно! Если бы явное преобразование было некорректно кодпад просто бы не слинковал либо выдал некорректную отработку.
именно то что это преобразование типов тут пропросту не надо так что не надо пытаться съехать на другую тему, вопрос стоял "Почему компилятор на это матерится?", а не как заткнуть компилятор

Добавлено через 2 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Стало быть (int)3.5/2 тоже будет некорректно
это static_cast преобразование и тут не надо снимать констатность

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Jupiter, ещё раз выставишь минус - тебя будут миносовать здесь до упокоя! Ты ответь за свои слова. Я тебя предупредил...

-=ЮрА=-
02.01.2013, 20:29
  #16

Не по теме:

Jupiter, съезжаешь тут ты!Мне с тобой всё ясно, потому говорить вообще не намерен...И хватит гадить чужой топик занимаясь оффтопом...

tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
02.01.2013, 20:49  [ТС]     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #17
Обяснить мне кто-то почему после присвоиння ObjC=ObjB=ObjA; ObjC стал 21,22,23 , должен стать 1,2,3!
Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
02.01.2013, 20:57     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #18
tokar2, поэтому иногда компилятору нужно подсказывать как преобразовывать результат операции
Вот так
C++
1
ObjC.Show((char *)"C=A+B");
И получить undefined behaviour при попытке изменить что-то в переданной строке.
-=ЮрА=-
Заблокирован
Автор FAQ
02.01.2013, 21:03     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #19
tokar2, покажи код с которым сейчас работаешь верней инициализацию ибо по твоему изначальному коду всё так как и должно быть. (Ты явно модернизировал код ибо даже вывод теперь иной стал)
Миниатюры
Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2013, 21:05     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])
Еще ссылки по теме:

C++ Invalid conversion from 'char' to 'const char*'
C++ invalid conversion from ‘char**’ to ‘const char**’
C++ Инициализация графического драйвера: Deprecated conversion from string constant to 'char*'

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

Или воспользуйтесь поиском по форуму:
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
02.01.2013, 21:05  [ТС]     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) #20
Здесь такое же как и в предыдущем, только вывод другой.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class kooClass {
    int x,y,z;
public:
    kooClass(){x=y=z=0; }
    kooClass(int a,int b,int c) { x=a;y=b;z=c;}
    kooClass operator+(kooClass);
    kooClass operator=(kooClass);
    void Show(char*);
};
 
kooClass kooClass::operator+(kooClass obj){
    
    x=x+obj.x;
    y=y+obj.y;
    z=z+obj.z;
    
    return *this;
}
 
kooClass kooClass::operator=(kooClass obj){
    
    x=obj.x;
    y=obj.y;
    z=obj.z;
    
    return *this;
}
 
void kooClass::Show(char*s){
    cout<<"<"<<s<<">"<<endl;
    cout<<"X = "<<x<<", Y = "<<y<<", Z = "<<z<<endl<<endl;
}
 
int main()
{
    kooClass ObjA(1,2,3),ObjB(10,10,10),ObjC;
    
    ObjA.Show("A");
    ObjB.Show("B");
    
    ObjC=ObjA+ObjB;
    ObjC.Show("C=A+B");
    
    ObjC=ObjA+ObjB+ObjC;
    ObjC.Show("C=A+B+C");
    
    ObjC=ObjB=ObjA;
    ObjC.Show("B=A");
    ObjC.Show("C=B");
    
    getch();
    return 0;
}
Yandex
Объявления
02.01.2013, 21:05     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])
Ответ Создать тему
Опции темы

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