将vector <string>传递给main中的对象实例时出错

时间:2016-04-25 13:38:13

标签: c++ c++11

xdata = [0.03447378,  0.06894757,  0.10342136,  0.13789514,  0.17236893,
    0.20684271,  0.24131649,  0.27579028,  0.31026407,  0.34473785,
    0.37921163,  0.41368542,  0.44815921,  0.48263299]

ydata = [ 2.5844 ,  2.87449,  3.01929,  3.10584,  3.18305,  3.24166,
    3.28897,  3.32979,  3.35957,  3.39193,  3.41662,  3.43956,
    3.45644,  3.47135]

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def func(x, a, b, c, d):
    return a + b*x - c*np.exp(-d*x)

popt, pcov = curve_fit(func, xdata, ydata))
plt.figure()
plt.plot(xdata, ydata, 'ko', label="Original Noised Data")
plt.plot(xdata, func(xdata, *popt), 'r-', label="Fitted Curve")
plt.legend()
plt.show()

这是代码运行的唯一方式。有没有办法将值直接传递给pair1对象实例

1 个答案:

答案 0 :(得分:0)

您将错误的类型传递给构造函数: "Jack"的类型为const char[5],第二个参数28.2的类型为double 您的构造函数虽然期望std::vector<string>std::vector<double>。所以问题是你的构造函数期待一个字符串和双打的“列表”,你没有给他什么 考虑到您班级的名称,正确的解决方案应该是:

class NamePairs
{
private:
    double age;
    std::string name;
public:
    NamePairs(const std::string& name, double Age)
    {
        this->name = name;
        this->age = age;
    }
};

现在您可以像这样实例化它:

NamePairs pair("Alfred", 43.4);

另请考虑使用std::pair

考虑到你想要一个每个人都有名字和年龄的人员名单,那里有一些不同的解决方案:
您可以创建一个具有两个属性的类Person

class Person
{
private:
    double Age;
    std::string Name;
public:
    Person(double age, const std::string& name)
    {
        Age = age;
        Name = name;
    }
};

并使用它:

std::vector<Person> persons;
persons.push_back(Person(23.4, "Alfons");

或者你也可以(更像你的尝试)创建一个类PersonList:

class PersonList
{
private:
    std::vector<double> Ages;
    std::vector<std::string> names;
public:
    void addPerson(double Age, const std::string& Name)
    {
        Ages.push_back(Age);
        Names.push_back(Names);
    }
};

并使用它:

PersonList list;
list.addPerson(23.5, "Andrea");

我更喜欢第一种方法,因为如果它们不在列表中(例如,由访问者返回或传递给其他函数/对象,或者如果您需要对他们进行操作)。它对我来说看起来更干净