首页 > 解决方案 > C++:无法将向量传递给构造函数

问题描述

所以我是 C++ 的新手,我的任务是创建一个类及其头文件 test.h 和 test.cpp。现在我需要创建一个构造函数,它将一个双精度向量作为参数并使用它来初始化对象。但是,我无法弄清楚如何准确地做到这一点。这是我在标题和 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);

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

标签: c++vectorconstructor

解决方案


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

如果您想要一个元素为 988 的向量,请使用:

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

这使用了一个初始化列表,可以从中构造一个向量。

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

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

这会将参数中的元素复制vmyVector.

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


推荐阅读