繁体   English   中英

C ++:传递const引用的const指针时出错

[英]C++: Error passing const pointer of const reference

我有C ++代码,在编译时会收到以下错误消息:

error: no matching function for call to ‘DataSourceScheme::initObject(const QString&, const QString&, QVector<ColumnScheme*>* const&)’
  initObject(datasourcescheme.name_, datasourcescheme.cmd_, datasourcescheme.columns_);

 note:   no known conversion for argument 3 from ‘QVector<ColumnScheme*>* const’ to ‘const QVector<const ColumnScheme*>*

C ++代码:

DataSourceScheme::DataSourceScheme(const DataSourceScheme &datasourcescheme) {
    initObject(datasourcescheme.name_, datasourcescheme.cmd_, datasourcescheme.columns_);   
}

void DataSourceScheme::initObject(const QString &name, const QString &cmd, const QVector<const ColumnScheme*> *columns) {
    name_ = name;
    cmd_ = cmd;
    columns_ = new QVector<ColumnScheme*>();
    if (columns != NULL) {
        for (const ColumnScheme *column : *columns) {
            addColumn(*column);
        }       
    }
}

请帮忙

谢谢!

也许您需要澄清const的用法。 foo* const A声明一个foo类型的对象,并创建一个指向该对象的常量指针。 可以更改对象,但不能更改指针。 const foo*创建一个指向常量对象的指针。 对象foo是不可修改的。

您试图将指向可编辑对象列表的常量指针传递给需要指向常量对象列表的指针的函数。 您看到这会导致问题吗? 函数中的用法与在创建要传递的对象时设置的标准不匹配。

您可以将普通指针传递给需要常量指针的函数。 这样转换就可以了,即

    void func(foo* const param); // Function declaration        
    foo* A;
    func(A); // Function call OK

也,

    void func(foo* const param); // Function declaration        
    foo* const A;
    func(A); // Function call OK

您不能将指向常量对象的指针传递给需要普通指针的函数。 这样转换就可以了,即

    void func(foo* param); // Function declaration        
    const foo* A;
    func(A); // Error

我将添加一个旁注。 使用void func(foo* const param); 恕我直言,这是一种好习惯,表示函数func不应删除,管理内存或重新分配指针。 这就是为什么许多Microsoft API调用都使用const关键字的原因。 他们仅使用对象,而绝不管理对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM