用我创建它的另一个文件中的参数实例化对象(C ++)

时间:2018-11-16 14:13:58

标签: c++

我在C ++中有两个类,并且在另一个中使用一个对象。因此,我必须实例化一个。我只能将其实例化为指针(带有*),但不像标头上的普通实例MyObj b;和cpp文件上的b = new MyObj(parameters);一样。我知道,如果我在同一文件上创建对象,则可以使用MyObj b(param);,并且不会创建指针。但是,如果我将创建和实例化拆分为不同的文件,则无法执行。 我应该怎么做? ps:我也必须在构造函数上使用动态参数。 谢谢

GPS.h文件

class GPS : public ISensor {
    public:
        SkinnyBuffer *buffer;
        // SkinnyBuffer buffer; // IF I create my object like this
        GPS();
        GPS(PRIVILEGES replay, std::string file = "GPS");
        ~GPS();
}

GPS.cpp文件

GPS::GPS() : ISensor() {
    GPS(PRIVILEGES::NO_ACCESS);
}
GPS::GPS(PRIVILEGES record, std::string file) : ISensor(record, file) {
    std::size_t size = 5 * sizeof(double);
    buffer = new SkinnyBuffer(size);

    // buffer = new SkinnyBuffer(size);  // WHY CAN I NOT DO THIS?
    // buffer(size); // WHY CAN I NOT DO THIS?
    ............
}
GPS::~GPS() {
    .............
}

1 个答案:

答案 0 :(得分:2)

您的SkinnyBuffer可能没有默认的构造函数,因此您应该在构造函数的初始值设定项列表中对其进行初始化:

// GPS.h file
class GPS : public ISensor
{
public:
    SkinnyBuffer buffer;
    GPS();
    GPS(PRIVILEGES replay, std::string file = "GPS");
    ~GPS();
}

// GPS.cpp file
//
GPS::GPS() : ISensor(), buffer(5 * sizeof(double)) // initialize buffer
{
    GPS(PRIVILEGES::NO_ACCESS);
}

GPS::GPS(PRIVILEGES record, std::string file) : ISensor(record, file),
    buffer(5 * sizeof(double)) // initialize buffer
{

}

GPS::~GPS()
{
    //.............
}