如何初始化对象数组?

myr*_*egm 2 c++ arrays runtime-error visual-studio object-initialization

我已经编写了这段代码,但是当我尝试初始化一个Critter对象数组并且不知道它们是关于什么时出现了一些错误。

我的代码:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Critter {
private:
    string crName;
public:
    Critter(string = "Poochie");
    string getName() const { return crName; }
};

Critter::Critter(string n) {
    crName = n;
}

int main() {
    Critter c[10] = { "bob","neo","judy","patrik","popo" }; //here
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Critter {
private:
    string crName;
public:
    Critter(string = "Poochie");
    string getName() const { return crName; }
};

Critter::Critter(string n) {
    crName = n;
}

int main() {
    Critter c[10] = { "bob","neo","judy","patrik","popo" }; //here
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码适用于朋友的 Visual Studio 2017,但不适用于我的 2019 版本。

谢谢。

ana*_*ciu 10

您的初始化是针对字符串数组,针对您需要的对象:

Critter c[10] = {Critter("bob"), Critter("neo"), Critter("judy"),
                 Critter("patrik"), Critter("popo")};
Run Code Online (Sandbox Code Playgroud)

或者

Critter c[10] = {{"bob"}, {"neo"}, {"judy"}, //(*)
                 {"patrik"}, {"popo"}}; 
Run Code Online (Sandbox Code Playgroud)

*第二种方法归功于@drescherjm 评论,然后是@dxiv 的回答,两者都首先提到了它。

这第二次初始化可能是你朋友用的,也许你忘记了大括号,IDE版本差异在这里似乎无关紧要。

请注意,C++ 为固定大小的数组提供了一个容器std::array

std::array<Critter, 10> c = {Critter("bob"), Critter("neo"),
                             Critter("judy"), Critter("patrik"), Critter("popo")};
Run Code Online (Sandbox Code Playgroud)

旁注:

你应该避免 using namespace std;