所以我从我的老师那里得到了这段代码,但它不能与其他代码结合使用,它只有在项目中单独存在的情况下才能工作。整个代码运行得很好,除了这一部分
"Notes“是另一个完美工作的类。
class student
{
char name[30];
notes marks;
public:
student(int = 8, char* =" "); //HERE IS WHERE I GOT THE PROBLEM, AT HIS CHAR*
~student();
void read_name();
void read_marks();
void modif_mark(int, double);
void print();
void check_marks();
};
/*...
...
...
*here is a lot of code working great*
...
...
...
*/
student::student(int nr_marks, char* sir) :
marks(nr_marks)
{
strcpy_s(name, sir);
}发布于 2019-04-19 02:34:49
根据编译器的不同,可能会在只读内存中分配C样式的字符串文字。因此,它们是const char[N+1] (__N是字符串长度)(由于数组到指针的衰减,它可以隐式转换为const char* )。
您遇到的问题是删除const限定符是非法的(臭名昭著的const_cast或等效的C风格类型转换除外)。
由于您仅从sir读取数据,因此可以通过将sir设置为const char*来解决此问题,这并不违反const
class student {
...
student(int = 8, const char* =" "); // problem solved
...
};
student::student(int nr_marks, const char* sir) : // remember to change it here as well
marks(nr_marks)
{
strcpy(name, sir);
}发布于 2019-04-19 02:48:52
在C中,字符串文字是
char[]类型,可以直接赋值给(非常量)char*。C++03也允许这样做(但不赞成这样做,因为C++中的文字是常量)。C++11不再允许在没有类型转换的情况下进行此类赋值。
你的老师可能更精通C或“过时”的C++。如上所述,语言(=现代C++)不允许从字符串文字赋值/初始化char*。
解决方法:
char const *作为参数的类型。这是不修改字符串时的合理解决方案(为什么要修改字符串literal??)char[]并引用它(的副本)。问题:线程安全;副作用;为什么要使用this??std::string.发布于 2021-06-29 00:52:14
以下是错误版本
print_results("C = ", c);以下是已解决的版本
print_results((char*)"C = ", c);https://stackoverflow.com/questions/55751920
复制相似问题