Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.80
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
#1

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

02.01.2013, 19:37. Просмотров 7741. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]) (C++):

[Warning] deprecated conversion from string constant to 'char*' - C++
Где ошибка?? #include&lt;iostream&gt; #include&lt;windows.h&gt; #include&lt;ctime&gt; using namespace std; void input(char* name,int n){ ...

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

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

Ошибка: deprecated conversion from string constant to ‘char*’ - C++
8,2.cpp: In function ‘int main()’: 8,2.cpp:31:12: warning: deprecated conversion from string constant to ‘char*’ String s1=&quot;H&quot;; ...

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

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

21
-=ЮрА=-
Заблокирован
Автор FAQ
02.01.2013, 19:39 #2
tokar2, попробуй
Цитата Сообщение от tokar2 Посмотреть сообщение
void kooClass::Show(const char*s){
(проект пока не компилил, возможно есть и другие недочёты)
1
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.01.2013, 19:47 #6
Цитата Сообщение от tokar2 Посмотреть сообщение
Почему компилятор на это матерится?
потому что "A" имеет тип const char[2] который неявно преобразовывается в const char*, вот компилятор и обалдевает от того что вы пытаетесь лишить строковый литерал константности
2
tokar2
25 / 25 / 1
Регистрация: 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 / 1
Регистрация: 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
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.01.2013, 19:58 #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
поэтому иногда компилятору нужно подсказывать как...
поэтому иногда программисту нужно включать думалку, метод Show не изменяет содержимое указателя а потому указатель должен быть указателем на константу
1
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
02.01.2013, 20:00  [ТС] #12
Это все-таки компилятор! Компилював ранее в Dev c++ и не работало, перешел в visual 2010 заработало!
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
02.01.2013, 20:25 #15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- именно! Если бы явное преобразование было некорректно кодпад просто бы не слинковал либо выдал некорректную отработку.
именно то что это преобразование типов тут пропросту не надо так что не надо пытаться съехать на другую тему, вопрос стоял "Почему компилятор на это матерится?", а не как заткнуть компилятор

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

Не по теме:

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

0
02.01.2013, 20:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2013, 20:25
Привет! Вот еще темы с ответами:

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

Как избавиться от "deprecated conversion from string constant to ‘char*’" - C++
Здравствуйте. У меня компилятор пишет: _.cpp:15: warning: deprecated conversion from string constant to ‘char*’ _.cpp:16:...

[Ошибка] invalid conversion from 'const char*' to 'char*' [-fpermissive] - C++
Решал задачи сам по себе, наткнулся на очень интересную. Вот сама задача: Вы оператор пуска ракет на ядерном подводном ...

Работа со строками - Invalid conversion from 'char' to 'const char*' - C++
#include &lt;iostream&gt; #include &lt;ctype.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; using namespace std; void poisk(int n, char...


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

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

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