gpt4 book ai didi

c++ - 如何使用自定义类声明数组?

转载 作者:IT老高 更新时间:2023-10-28 21:36:58 26 4
gpt4 key购买 nike

我正在尝试使用自定义类声明一个数组。当我向类添加构造函数时,我的编译器提示说“没有匹配的构造函数用于初始化名称 [3]”。

这是我的程序:

#include <iostream>

using namespace std;

class name {
public:
string first;
string last;

name(string a, string b){
first = a;
last = b;
}
};

int main (int argc, const char * argv[])
{

const int howManyNames = 3;

name someName[howManyNames];

return 0;
}

我该怎么做才能让它运行,我做错了什么?

最佳答案

您必须提供一个默认构造函数。当你在做的时候,也修复你的另一个构造函数:

class Name
{
public:
Name() { }
Name(string const & f, string const & l) : first(f), last(l) { }
//...
};

或者,您必须提供初始化程序:

Name arr[3] { { "John", "Doe" }, { "Jane", "Smith" }, { "", "" } };

后者在概念上更可取,因为你的类没有理由应该有“默认”状态的概念。在这种情况下,您只需必须为数组的每个元素提供适当的初始化程序。

C++ 中的对象永远不会处于定义不明确的状态;这么一想,一切都应该很清楚了。


另一种方法是使用 dynamic 容器,尽管这与您要求的不同:

std::vector<Name> arr;
arr.reserve(3); // morally "an uninitialized array", though it really isn't

arr.emplace_back("John", "Doe");
arr.emplace_back("Jane", "Smith");
arr.emplace_back("", "");

std::vector<Name> brr { { "ab", "cd" }, { "de", "fg" } }; // yet another way

关于c++ - 如何使用自定义类声明数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8579694/

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