我不明白为什么我的编译器会给我一个关于从字符串到char的弃用转换的警告。
这是抱怨警告的地方:
我正在做的事情的一些背景......我正在努力理解和实践例外......我不确定是否更好地使用char [1000]作为名字等等如果有人帮助理解警告并帮助我找到解决方案,我将非常感激..谢谢..
=============================================== ==================================
class TeLoEnYuco
{
string FN, LN, R;
double Income;
public:
const char *getters(){return FN.data(), LN.data(), R.data();}
virtual char *getFacilityAccess()=0;
TeLoEnYuco(char *fn, char *ln, char r, double inc)
{
if(fn==0) throw Exception(1, "First Name is Null"); //Warning #1
if(ln==0) throw Exception(2, "Last Name is Null"); //Warning #2
if(r==0) throw Exception(3, "Rank is Null"); //Warning #3
if(inc<=0) throw Exception(4, "Income is Null"); //Warning #4
FN=fn;
LN=ln;
R=r;
Income=inc;
}
};
=====================异常类======================== =========
class Exception
{
int Code;
string Mess;
public:
Exception(int cd, char *mess)
{
Code=cd;
Mess=mess;
}
int getCode(){return Code;}
const char *getMess(){return Mess.data();}
};
答案 0 :(得分:14)
我认为Exception
的构造函数签名是
Exception(int, char*)
您将字符串文字作为参数传递,其实际类型为const char*
,但隐式转换为char*
是合法的C ++之前的版本11(但已弃用,因此您会收到警告)
将签名修改为
Exception(int, const char*)
或者,更好的是,
Exception(int, const std::string&)
总结:
char* x = "stringLiteral"; //legal pre-C++11, deprecated
const char* y = "stringLiteral"; // good
std::string z ("stringLiteral"); // even better