我不久前开始在一本书上学习C++,现在我被书中的一部分代码卡住了,这部分代码在我的应用编程接口上不起作用,那就是Visual Studio2019。这本书来自2000年,所以这可能是问题的一部分,但如果是的话,你能告诉我如何修补它吗?
问题出在下面的代码中。这本书的作者希望使用字符数组作为构造函数的参数,并使用指针( char * pName)来实现。但是,Visual Studio在参数("0. DannyBoy")下划线。我环顾四周寻找答案,但没有一个看起来像我的。如果有人能帮我,我将不胜感激!
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string.h>
using namespace std;
const int MAXNAMESIZE = 40;
class Student
{
public:
Student(char* pName)
{
strncpy_s(name, pName, MAXNAMESIZE);
name[MAXNAMESIZE - 1] = '\0';
semesterHours = 0;
gpa = 0;
}
//... autres membres publics...
protected:
char name[MAXNAMESIZE];
int semesterHours;
float gpa;
};
int main(int argcs, char* pArgs[])
{
Student s("0. DannyBoy");
Student* pS = new Student("E. Z. Rider");
system("pause");
return 0;
}
发布于 2020-06-17 15:40:47
字符串文字是衰减为const char *
的const char []
类型。您的构造函数应采用const char *
// VVVVV
Student(const char* pName)
{
strncpy_s(name, pName, MAXNAMESIZE);
name[MAXNAMESIZE - 1] = '\0';
semesterHours = 0;
gpa = 0;
}
发布于 2020-06-17 15:41:00
在这一行上:
Student s("0. DannyBoy");
您正在向Student
的构造函数传递类型为char[12]
的字符串文字。
但是,您需要使用char const *
绑定到char
数组,因此您的构造函数需要如下所示:
Student(char const * pName) {
发布于 2020-06-17 15:50:06
在C语言中,字符串字面量具有非常数组类型。在C++ 11之前,为了向后兼容,标准C++编译器允许使用字符串文字作为非常数类型为char *
的参数的参数。
然而,尽管在C中,字符串文字具有非常量字符数组,但是您不能更改它们。
在C++ 11中,决定不允许将字符串文字与类型char *
一起使用,因为在C++中,它们具有常量字符数组类型。
所以像这样声明构造函数
Student( const char *pName )
在任何情况下都更好,因为这个声明告诉类的读取器,传递的字符串不会在构造函数中更改,即使参数不是字符串文字。
https://stackoverflow.com/questions/62432850
复制相似问题