我在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() {
.............
}
答案 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()
{
//.............
}