こんにちは,初めて投稿をさせてもらいます。
参考書を読んでいて,あるソースコードをコンパイルしたときに,以下のメッセージが出ました。
warning: conversion from string literal to 'char *' is deprecated [-Wc++11-compat-deprecated-writable-strings]
char *subname[] = {"Math", "English", "Science"};
^
lang
1#include<iostream> 2#include<string.h> 3 4using namespace std; 5 6class Student{ 7public: 8 void SetID(int num){ 9 id = num; 10 } 11 void SetName(char *str){ 12 strcpy(name, str); 13 } 14 int GetID(){ 15 return id; 16 } 17 char *GetName() const{ 18 return (char *)name; 19 } 20 21private: 22 int id; 23 char name[30]; 24}; 25 26enum Subjects{Math, English, Science}; 27 28class Exam{ 29public: 30 void SetInfo(int id, char *name, Subjects s, int num); 31 int GetPoint() const{ 32 return point; 33 } 34 void GetResult(char *buf) const; 35 36 Student student; 37private: 38 Subjects subject; 39 int point; 40}; 41 42void Exam::SetInfo(int id, char *name, Subjects s, int num){ 43 student.SetID(id); 44 student.SetName(name); 45 subject = s; 46 point = num; 47} 48 49void Exam::GetResult(char *buf) const{ 50 char *subname[] = {"Math", "English", "Science"}; 51 sprintf(buf, "%s:%d", subname[subject], point); 52} 53 54void PrintResult(const Exam &Exam){ 55 cout << Exam.student.GetName() << endl; 56 char buf[30]; 57 Exam.GetResult(buf); 58 cout << buf << endl; 59} 60 61int main(){ 62 Exam Exam[3]; 63 Exam[0].SetInfo(1, "Ken", Math, 60); 64 PrintResult(Exam[0]); 65 return 0; 66}
「文字列リテラルから 'char*型' への変換は非推奨です。」ということなのですが,
0. このソース内の,どこで変換を実施しようとしているのか。
0. 実行出来るようにはどのように変えればいいのか。
0. 非推奨ということは,無理矢理実行することも可能なのか。
を教えていただきたいです。よろしくお願いします。
ソースコードの引用元 (株)アンク著「C++の絵本」 (一部改変)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/05/12 10:26