25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
1

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

02.01.2013, 19:37. Показов 14512. Ответов 21
Метки нет (Все метки)

Почему компилятор на это матерится?
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;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.01.2013, 19:37
Ответы с готовыми решениями:

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

[Warning] deprecated conversion from string constant to 'char*'
Где ошибка?? #include&lt;iostream&gt; #include&lt;windows.h&gt; #include&lt;ctime&gt; using namespace std;...

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

Deprecated conversion from string constant to 'char*'
Здраствуйте, помогите мне пожалуйста! Объясните в чем проблема #include&lt;stdlib.h&gt; #include...

21
Заблокирован
Автор FAQ
02.01.2013, 19:39 2
tokar2, попробуй
Цитата Сообщение от tokar2 Посмотреть сообщение
void kooClass::Show(const char*s){
(проект пока не компилил, возможно есть и другие недочёты)
1
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
02.01.2013, 19:40 3
C++
1
void Show(const char*)
1
Заблокирован
Автор FAQ
02.01.2013, 19:45 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
1
-=ЮрА=-
02.01.2013, 19:46
  #5

Не по теме:

DELDELDEL

0
Каратель
Эксперт С++
6606 / 4025 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.01.2013, 19:47 6
Цитата Сообщение от tokar2 Посмотреть сообщение
Почему компилятор на это матерится?
потому что "A" имеет тип const char[2] который неявно преобразовывается в const char*, вот компилятор и обалдевает от того что вы пытаетесь лишить строковый литерал константности
2
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
02.01.2013, 19:49  [ТС] 7
Не работает почему-то! У меня наверное компилятор накрылся)
0
Заблокирован
Автор FAQ
02.01.2013, 19:52 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 врать не будет...

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

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

Не по теме:

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

0
Каратель
Эксперт С++
6606 / 4025 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.01.2013, 19:58 11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
поэтому иногда компилятору нужно подсказывать как...
поэтому иногда программисту нужно включать думалку, метод Show не изменяет содержимое указателя а потому указатель должен быть указателем на константу
1
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
02.01.2013, 20:00  [ТС] 12
Это все-таки компилятор! Компилював ранее в Dev c++ и не работало, перешел в visual 2010 заработало!
0
Don't worry, be happy
17769 / 10534 / 2034
Регистрация: 27.09.2012
Сообщений: 26,505
Записей в блоге: 1
02.01.2013, 20:04 13
Цитата Сообщение от tokar2 Посмотреть сообщение
Компилював ранее в Dev c++ и не работало
Возможно, проблема в "Мои документы". Вроде как Dev C++ недолюбливает кириллицу
0
Заблокирован
Автор FAQ
02.01.2013, 20:20 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
0
Каратель
Эксперт С++
6606 / 4025 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.01.2013, 20:25 15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- именно! Если бы явное преобразование было некорректно кодпад просто бы не слинковал либо выдал некорректную отработку.
именно то что это преобразование типов тут пропросту не надо так что не надо пытаться съехать на другую тему, вопрос стоял "Почему компилятор на это матерится?", а не как заткнуть компилятор

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

Не по теме:

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

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

Не по теме:

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

0
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
02.01.2013, 20:49  [ТС] 17
Обяснить мне кто-то почему после присвоиння ObjC=ObjB=ObjA; ObjC стал 21,22,23 , должен стать 1,2,3!
Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])
0
527 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
02.01.2013, 20:57 18
tokar2, поэтому иногда компилятору нужно подсказывать как преобразовывать результат операции
Вот так
C++
1
ObjC.Show((char *)"C=A+B");
И получить undefined behaviour при попытке изменить что-то в переданной строке.
1
Заблокирован
Автор FAQ
02.01.2013, 21:03 19
tokar2, покажи код с которым сейчас работаешь верней инициализацию ибо по твоему изначальному коду всё так как и должно быть. (Ты явно модернизировал код ибо даже вывод теперь иной стал)
Миниатюры
Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])  
0
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
02.01.2013, 21:05  [ТС] 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;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2013, 21:05
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru