gpt4 book ai didi

c++ - 我的库中的多个类 : incomplete type is not allowed

转载 作者:太空宇宙 更新时间:2023-11-04 15:47:54 25 4
gpt4 key购买 nike

这是我第一次将我的库功能拆分为多个类。我不确定如何根据类实例化我的对象。我是否需要实例化类对象才能访问这些类方法和变量,即使这些类位于同一个 .h 文件中?我收到第 30 行的错误“不允许使用不完整的类型”。

我的代码:

/*
File: sensor.h

Header file for phSensor Library.
*/

#ifndef SENSOR_H
#define SENSOR_H

#include "mbed.h"
#include "cfExtensions.h"
#include "msExtensions.h"

#include <string>

class phSensor;
class ecSensor;
class tempSensor;

class sensor
{
public:
sensor(); //Default sensor constructor
sensor(cfExtensions &cfExt, msExtensions &msExt);

private:
cfExtensions &_cfExt;
msExtensions &_msExt;

phSensor ph; // Line 30, gets error "incomplete type is not allowed"
ecSensor ec;
tempSensor temp;

string _phCurrentPhValue;
string _phMaxValue;
string _phMinValue;

};

class phSensor
: public sensor
{
public:
phSensor();

void outputPhMaxValue();

private:
float _getCurrentPhValue();
float _getPhMaxValue();
float _getPhMinValue();

void _setPhMaxValue();
void _setPhMinValue();

void _calibratePhSensor();

Ticker getPhMax;
Ticker getPhMin;
};

class ecSensor
: public sensor
{
public:
ecSensor();
};

class tempSensor
: public sensor
{
public:
tempSensor();

};

#endif

最佳答案

其他人已经评论过声明 phSensor ph; 的问题。

我要评论你的设计。

关于您的类传感器
首先,你为什么要这样做?

您在面向对象中学到的第一件事就是继承,例如 Vehicle 类,包含 CarTruckBicycle 都是该基础车辆类的子类。很好,很简单,但经常出错。最终,您需要忘却面向对象编程的幼稚观点。

恰当的例子:仅仅因为 pH 传感器、电导率传感器和温度传感器都是某种类型的传感器并不一定意味着创建一个 Sensor 基类是个好主意。所有传感器共享的共同元素是什么?如果没有,那么拥有 sensor 基类也许不是一个好主意。

做好一件事
您的 sensor 类正在做两件事。它是其他传感器类的基类并且它是三种传感器的集合。这是两个非常不同的东西,所以这些不同的行为应该属于两个非常不同的类。如果将该类分成两类,sensor 作为基类(如果需要;见上文),multisensor 包含 pH 值,那么您眼前的问题就会消失传感器、电导率传感器和温度传感器。没有必要让这个 multisensor 类继承自 sensor,甚至 phsensor 等。这个新类将包含多个传感器。组合通常是比继承更好的途径。

关于类sensor构造函数
您有两个引用的数据成员。引用只能由构造函数设置,并且只能在初始化列表中设置。我可以看到非默认构造函数的作用。你的默认构造函数是做什么的?您的派生类只有默认构造函数,这表明它们正在调用 sensor 类的默认构造函数。这有意义吗?摆脱那些默认构造函数可能会更好。在 C++03 中执行此操作的标准方法是将默认构造函数声明为私有(private)但从不提供实现。 C++11 中有一个更好的选择,即声明构造函数已删除。

关于c++ - 我的库中的多个类 : incomplete type is not allowed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13724490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com