【发布时间】:2026-01-28 11:00:02
【问题描述】:
我有以下课程(简体)
基类 - ExchangeGatewayUDSHandler.h
class ExchangeGatewayUDSHandler : public Instrument::IInstrumentListener
{
public:
explicit ExchangeGatewayUDSHandler(const EGUDSConfig& config);
virtual ~ExchangeGatewayUDSHandler();
void ProcessEnqueue(UDSRequest& udsRequest);
protected:
struct UDSValidityInfo
{
public:
UDSValidityInfo() = default;
void SetValidity(const bool validity) { isValid_ = validity; }
void SetReason(const char* reason) { reason_ = reason; }
inline const std::string GetReason() const { return reason_; }
inline const bool GetValidity() const { return isValid_; }
private:
bool isValid_;
std::string reason_;
};
virtual UDSValidityInfo UDSRequestIsValid(const UDSRequest& udsReq) { return {}; }
};
如您所见,UDSValidityInfo 是一个嵌套结构。它只会在ExchangeGatewayUDSHandler 及其所有派生类中创建。唯一的问题是,由于某种原因,在派生类 ExchangeGatewayICEUDSHandler 的 CPP 文件中,我无法返回 UDSValidityInfo。
派生类 - ExchangeGatewayICEUDSHandler.h
class ICEGatewayUDSHandler: public ExchangeGatewayUDSHandler
{
public:
ICEGatewayUDSHandler(const ExchangeGatewayUDSHandlerConfig& config);
protected:
virtual UDSValidityInfo UDSRequestIsValid(const UDSRequest& udsReq) override; // No error
};
派生类 - ExchangeGatewayICEUDSHandler.cpp
ICEGatewayUDSHandler::ICEGatewayUDSHandler(const ExchangeGatewayUDSHandlerConfig& config)
: ExchangeGatewayUDSHandler(config) {};
// Error in return type
UDSValidityInfo ICEGatewayUDSHandler::UDSRequestIsValid(const UDSRequest& udsReq)
{
UDSValidityInfo validityObject{}; // No error creating the struct here.
validityObject.SetValidity(true);
if (udsReq.legs_.empty())
{
validityObject.SetReason("The UDS contains no legs.");
validityObject.SetValidity(false);
}
return validityObject;
}
Visual Studio 19 说错误是:
标识符“UDSValidityInfo”无法识别
我还收到函数类型错误 (virtual UDSValidityInfo UDSRequestIsValid(const UDSRequest& udsReq) override;),即使 .h 文件(声明它的位置)中没有此函数的错误,说明这两个函数不兼容。
我不确定为什么会这样。当我将结构设为静态时,问题就消失了,但我认为这是作弊。
谢谢。
【问题讨论】:
标签: c++ class nested inner-classes