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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 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. Просмотров 7405. Ответов 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,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
02.01.2013, 20:29     Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])
  #16

Не по теме:

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

0
tokar2
25 / 25 / 1
Регистрация: 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
Герц
524 / 341 / 4
Регистрация: 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 / 1
Регистрация: 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
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
02.01.2013, 21:09 #21
tokar2, в этом коде оператор + неправильно определен. Он не должен менять значение операнда.

Т.е. вместо
C++
1
x=x+obj.x;
Нужно:
C++
1
tmp.x=x+obj.x;
Как было у вас изначально.
1
-=ЮрА=-
Заблокирован
Автор FAQ
02.01.2013, 21:10 #22
Цитата Сообщение от tokar2 Посмотреть сообщение
kooClass kooClass::operator+(kooClass obj){
x=x+obj.x;
* * y=y+obj.y;
* * z=z+obj.z;
return *this;
}
- это не одно и тоже
Цитата Сообщение от tokar2 Посмотреть сообщение
kooClass kooClass::operator+(kooClass obj){
* * kooClass tmp;
* * tmp.x=x+obj.x;
* * tmp.y=y+obj.y;
* * tmp.z=z+obj.z;
return tmp;
}
- вот так правильно!

Добавлено через 58 секунд
tokar2, верни свой изначальный код, вторая версия кода модернизирует переменные класса x,y,z, в результате чего необратимо теряются их начальные значения
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2013, 21:10
Привет! Вот еще темы с ответами:

Компилятор выдает предупреждение при инициализации строки: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...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.01.2013, 21:10
Ответ Создать тему
Опции темы

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