gpt4 book ai didi

带参数列表的 C++ 构造函数

转载 作者:行者123 更新时间:2023-12-02 09:54:57 24 4
gpt4 key购买 nike

我越来越熟悉 C++ 中的构造函数,并且想知道为什么我的 C++ 编译器找不到带有参数列表的构造函数。

#include <cstdio>
#include <string>

const int defaultAge = 0;
const std::string unknown = "unknown";

class Patient {

public:
int age;
std::string dob;
std::string name;

public:
Patient(); // Default Constructor
Patient(int &years, std::string &birthdate, std::string &aliase); // Argument-List Constructor
void print();
};

Patient::Patient() : age(defaultAge), dob(unknown), name(unknown) {
puts("Patient information from default consturctor:");
}

Patient::Patient(int &years, std::string &birthdate, std::string &aliase)
: age(years), dob(birthdate), name(aliase) {
puts("Patient information from copy consturctor:");
}

void Patient::print() {
printf(" Name - %d\n DOB - %s\n Name - %s\n", age, dob.c_str(), name.c_str());
}

int main(void) {

Patient p0;
p0.print();

Patient p1(40, "August 11, 1980", "John Doe");
p1.print();

return 0;
}

尝试编译代码时出现以下错误:

compilation error

我使用 Apple clang 11.0.0 作为我的编译器

最佳答案

您将参数声明为对非 const 的左值引用,它不能绑定(bind)到像 40 这样的右值。 (这是一个 int 文字),"August 11, 1980""John Doe" (它们是字符串文字,将被隐式转换为 std::string 作为临时值,它们是右值)。

您可以使它们成为对 const 的左值引用(对于声明和定义),例如

Patient(const int &years, const std::string &birthdate, const std::string &aliase);
// ^^^^^ ^^^^^ ^^^^^

int只是让它按值传递。
Patient(int years, const std::string &birthdate, const std::string &aliase);
// ^^^ ^^^^^ ^^^^^

LIVE

关于带参数列表的 C++ 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60983103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com