C++:无法将向量传递给构造函数

C++: Unable to pass vector to the constructor

本文关键字:构造函数 向量 C++      更新时间:2023-10-16

所以我是C++的新手,我被赋予了创建一个类及其头文件test.h和test.cpp的任务。现在我需要创建一个构造函数,它将doubles的向量作为参数,并使用它来初始化对象。然而,我不知道如何准确地做到这一点。这是我在头和cpp类上添加的内容,我得到了一个错误

头文件:

#include <string>
#include <vector>
using namespace std;
class Dog
{
int age;
string name;
vector<long double> myVector;
public:
Dog();   
Dog(string name, int age, vector<long double> myVector);
};
#endif // DOG_H

cpp文件:

using namespace std;
Dog::Dog()
{
cout << "Dog object created"<< endl;   
}
Dog::Dog(string name, int age, vector<long double> myVector)
: name(name), age(age), myVector(myVector.push_back(myVector))
{
cout << name<<" "<< age <<" "<<myVector<< endl;
}

现在在我的主类中,如果我添加以下内容:

Dog d("Kelly",3,988);

并运行程序,我得到了不匹配的操作员错误。

您需要将第三个参数作为向量传递,或者作为可以在向量的构造函数中使用的东西传递。

如果你想要一个元素为988的矢量,那么使用:

Dog d("Kelly", 3, { 988 });

这使用了一个初始值设定项列表,可以从该列表构造向量。

这将突出另一个问题,即myVector成员变量在初始值设定项列表中未正确初始化。相反,这应该看起来像:

Dog::Dog(string name, int age, vector<long double> v) : name(name), age(age), myVector(v)

这将参数v中的元素复制到myVector中。

还建议不要在头文件中包含using namespace std。这是因为#include <Dog.h>的任何人最终都会使用顶级的std命名空间。看看这个答案:https://stackoverflow.com/a/1453605/1517648