Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Poco::AutoPtr上的常量指针_C++_Poco Libraries - Fatal编程技术网

C++ Poco::AutoPtr上的常量指针

C++ Poco::AutoPtr上的常量指针,c++,poco-libraries,C++,Poco Libraries,使用AutoPtr尝试工作常量指针: void LiveTimeConfig::setup(const AbstractConfiguration& cfg){ GetLogger().information("LiveTimeConfig::setup(): init data"); Poco::AutoPtr<const AbstractConfiguration> view = cfg.createView("live_time");

使用AutoPtr尝试工作常量指针:

void LiveTimeConfig::setup(const AbstractConfiguration& cfg){
    GetLogger().information("LiveTimeConfig::setup(): init data");
    Poco::AutoPtr<const AbstractConfiguration> view = 
    cfg.createView("live_time");
    try {
       readExist(view, Field::Token, _token);
       readExist(view, Field::Solt, _solt);
    } catch (Poco::SyntaxException& ) {
         GetLogger().error("LiveTimeConfig::setup(): bad values");
         throw Poco::RuntimeException("LiveTimeConfig::setup(): invalid format");
    }
}
void LiveTimeConfig::setup(const AbstractConfiguration&cfg){
GetLogger().information(“LiveTimeConfig::setup():init data”);
Poco::自动传输视图=
cfg.createView(“实时”);
试一试{
readExist(视图,字段::令牌,_令牌);
readExist(视图,字段::Solt,_Solt);
}catch(Poco::SyntaxException&){
GetLogger()错误(“LiveTimeConfig::setup():错误值”);
抛出Poco::RuntimeException(“LiveTimeConfig::setup():无效格式”);
}
}
但我在比较运算符上有错误

。/../../build/pc/include/Poco/AutoPtr.h:在“类Poco::AutoPtr”的实例化中:src/LiveTimeConfig.cpp:27:54:从这里开始需要../../../build/pc/include/Poco/AutoPtr.h:263:7:错误:“bool Poco::AutoPtr::operator==(C*)const[with C=const Poco::Util::AbstractConfiguration]”不能重载bool operator==(C*ptr)常数
^../../../build/pc/include/Poco/AutoPtr.h:258:7:错误:带有'bool-Poco::AutoPtr::operator==(const C*)常量[带有C=const-Poco::Util::AbstractConfiguration]'bool operator==(const C*ptr)常量
^../../../build/pc/include/Poco/AutoPtr.h:278:7:错误:'boolpoco::AutoPtr::operator=(C*)const[with C=const Poco::Util::AbstractConfiguration]'不能重载布尔运算符!=(C*ptr)常数
^../../../build/pc/include/Poco/AutoPtr.h:273:7:错误:带有'bool-Poco::AutoPtr::operator=(const C*)const[with C=const Poco::Util::AbstractConfiguration]“bool运算符!”(常数C*ptr)常数
^../../../build/pc/include/Poco/AutoPtr.h:293:7:错误:'boolpoco::AutoPtr::operator=(C*ptr)const
^../../../build/pc/include/Poco/AutoPtr.h:333:7:错误:使用'bool-Poco::AutoPtr::operator>=(常量C*)常量[使用C=const-Poco::Util::AbstractConfiguration]'bool operator>=(常量C*ptr)常量
如何为const AbstractConfiguration创建AutoPtr*

UPD

如果使用

const Poco::AutoPtr<AbstractConfiguration> view = cfg.createView("live_time");
const Poco::AutoPtr view=cfg.createView(“实时”);
错误是

/home/evgen/projects/AuthService/Core/Module/src/LiveTimeConfig.cpp:27:错误:从“const-Poco::Util::AbstractConfiguration*”到“Poco::Util::AbstractConfiguration*”的转换无效[-fpermissive]
const Poco::AutoPtr view=cfg.createView(“实时”);
^

我不知道这个库,也不知道它的内部结构,但似乎它在内部操作const类型时有问题。但这不应该是个问题,因为,
get
函数有两个重载,一个用于
const
对象实例的重载返回
const
指针。(
const C*get()const;
)因此您可以使用:

const Poco::AutoPtr<AbstractConfiguration> view = 
cfg.createView("live_time");

但是当您声明
Poco::AutoPtr
时,两个重载具有相同的声明

bool operator == (
    const AbstractConfiguration * ptr
) const;
调用编译错误


我不知道这个库,也不知道它的内部结构,但似乎它在内部操作const类型时有问题。但这不应该是个问题,因为,
get
函数有两个重载,一个用于
const
对象实例的重载返回
const
指针。(
const C*get()const;
)因此您可以使用:

const Poco::AutoPtr<AbstractConfiguration> view = 
cfg.createView("live_time");

但是当您声明
Poco::AutoPtr
时,两个重载具有相同的声明

bool operator == (
    const AbstractConfiguration * ptr
) const;
调用编译错误

仅使用const_cast成功构建和工作,但我认为这是黑客和气味代码

const Poco::AutoPtr<AbstractConfiguration> view = const_cast<AbstractConfiguration*>(cfg.createView("live_time"));
const Poco::AutoPtr view=const_cast(cfg.createView(“实时”);
仅使用const_cast成功构建和工作,但我认为这是黑客和气味代码

const Poco::AutoPtr<AbstractConfiguration> view = const_cast<AbstractConfiguration*>(cfg.createView("live_time"));
const Poco::AutoPtr view=const_cast(cfg.createView(“实时”);

Poco::AutoPtr假设引用计数,即修改对象内的计数器。这与对象的常量相冲突

Poco::AutoPtr假定引用计数,即修改对象内的计数器。这与对象的常量冲突

感谢您的详细回复。显然,无法为常量对象上的指针创建Poco::AutoPtr。P.S.const Poco::AutoPtr不工作。您所说的“
const Poco::AutoPtr
不工作”是什么意思?它不编译吗?那么什么是错误呢?@KopysovEvgeniy在上面的评论中,忘了打电话感谢您的详细回复。显然,无法为常量对象上的指针创建Poco::AutoPtr。P.S.const Poco::AutoPtr不工作。您所说的“
const Poco::AutoPtr
不工作”是什么意思?它不编译吗?那么什么是错误呢?@KopysovEvgeniy在上面的评论中说,忘了打电话了。我恐怕你不能用这种自动变速器的设计来避免它。您可以做的事情是将这个SO问题报告给AutoPtr的制作人,并使用std::make_unique之类的东西在const_cast上创建包装器(以便在修复后可以轻松删除它)。如果需要的话,我可以在几个小时内做一些例子。恐怕你不能用这种自动变速器的设计来避免它。您可以做的事情是将这个SO问题报告给AutoPtr的制作人,并使用std::make_unique之类的东西在const_cast上创建包装器(以便在修复后可以轻松删除它)。如果需要,我可以在几个小时内做一些例子