Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.81/48: Рейтинг темы: голосов - 48, средняя оценка - 4.81
tokar2
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
1

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

02.01.2013, 19:37. Просмотров 9390. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
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...

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

21
-=ЮрА=-
Заблокирован
Автор FAQ
02.01.2013, 19:39 2
tokar2, попробуй
Цитата Сообщение от tokar2 Посмотреть сообщение
void kooClass::Show(const char*s){
(проект пока не компилил, возможно есть и другие недочёты)
1
Croessmah
++Ͻ
15308 / 8683 / 1657
Регистрация: 27.09.2012
Сообщений: 21,402
Записей в блоге: 2
Завершенные тесты: 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:45
-=ЮрА=-
02.01.2013, 19:46
  #5

Не по теме:

DELDELDEL

0
Jupiter
Каратель
Эксперт С++
6574 / 3995 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.01.2013, 19:47 6
Цитата Сообщение от tokar2 Посмотреть сообщение
Почему компилятор на это матерится?
потому что "A" имеет тип const char[2] который неявно преобразовывается в const char*, вот компилятор и обалдевает от того что вы пытаетесь лишить строковый литерал константности
2
tokar2
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
tokar2
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
Jupiter
Каратель
Эксперт С++
6574 / 3995 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.01.2013, 19:58 11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
поэтому иногда компилятору нужно подсказывать как...
поэтому иногда программисту нужно включать думалку, метод Show не изменяет содержимое указателя а потому указатель должен быть указателем на константу
1
tokar2
25 / 25 / 11
Регистрация: 09.11.2012
Сообщений: 229
02.01.2013, 20:00  [ТС] 12
Это все-таки компилятор! Компилював ранее в Dev c++ и не работало, перешел в visual 2010 заработало!
0
Croessmah
++Ͻ
15308 / 8683 / 1657
Регистрация: 27.09.2012
Сообщений: 21,402
Записей в блоге: 2
Завершенные тесты: 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
Jupiter
Каратель
Эксперт С++
6574 / 3995 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.01.2013, 20:25 15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- именно! Если бы явное преобразование было некорректно кодпад просто бы не слинковал либо выдал некорректную отработку.
именно то что это преобразование типов тут пропросту не надо так что не надо пытаться съехать на другую тему, вопрос стоял "Почему компилятор на это матерится?", а не как заткнуть компилятор

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

Не по теме:

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

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

Не по теме:

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

0
tokar2
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
Герц
526 / 343 / 12
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 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, покажи код с которым сейчас работаешь верней инициализацию ибо по твоему изначальному коду всё так как и должно быть. (Ты явно модернизировал код ибо даже вывод теперь иной стал)
0
Миниатюры
Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])  
tokar2
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
02.01.2013, 21:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2013, 21:05

Исправить предупреждение 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® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru