首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >构造函数中的字符指针参数问题(C++)

构造函数中的字符指针参数问题(C++)
EN

Stack Overflow用户
提问于 2020-06-17 15:37:50
回答 3查看 325关注 0票数 0

我不久前开始在一本书上学习C++,现在我被书中的一部分代码卡住了,这部分代码在我的应用编程接口上不起作用,那就是Visual Studio2019。这本书来自2000年,所以这可能是问题的一部分,但如果是的话,你能告诉我如何修补它吗?

问题出在下面的代码中。这本书的作者希望使用字符数组作为构造函数的参数,并使用指针( char * pName)来实现。但是,Visual Studio在参数("0. DannyBoy")下划线。我环顾四周寻找答案,但没有一个看起来像我的。如果有人能帮我,我将不胜感激!

代码语言:javascript
运行
AI代码解释
复制
#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;
}
EN

回答 3

Stack Overflow用户

发布于 2020-06-17 15:40:47

字符串文字是衰减为const char *const char []类型。您的构造函数应采用const char *

代码语言:javascript
运行
AI代码解释
复制
//      VVVVV
Student(const char* pName)
{
    strncpy_s(name, pName, MAXNAMESIZE);
    name[MAXNAMESIZE - 1] = '\0';
    semesterHours = 0;
    gpa = 0;
}
票数 1
EN

Stack Overflow用户

发布于 2020-06-17 15:41:00

在这一行上:

代码语言:javascript
运行
AI代码解释
复制
Student s("0. DannyBoy");

您正在向Student的构造函数传递类型为char[12]的字符串文字。

但是,您需要使用char const *绑定到char数组,因此您的构造函数需要如下所示:

代码语言:javascript
运行
AI代码解释
复制
Student(char const * pName) {
票数 0
EN

Stack Overflow用户

发布于 2020-06-17 15:50:06

在C语言中,字符串字面量具有非常数组类型。在C++ 11之前,为了向后兼容,标准C++编译器允许使用字符串文字作为非常数类型为char *的参数的参数。

然而,尽管在C中,字符串文字具有非常量字符数组,但是您不能更改它们。

在C++ 11中,决定不允许将字符串文字与类型char *一起使用,因为在C++中,它们具有常量字符数组类型。

所以像这样声明构造函数

代码语言:javascript
运行
AI代码解释
复制
Student( const char *pName )

在任何情况下都更好,因为这个声明告诉类的读取器,传递的字符串不会在构造函数中更改,即使参数不是字符串文字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62432850

复制
相关文章

相似问题

如何向此异步函数添加超时

234

如何向此限制函数添加新参数?

20

如何向此javascript函数添加过渡

10

如何向此添加参数传递

224

javascript向函数参数添加值

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档