我有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);
}
}
}
请帮忙
谢谢!
答案 0 :(得分:0)
也许您需要澄清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
不会被删除,管理内存或重新分配指针。这就是许多微软API调用使用const关键字的原因。他们只是使用对象,但绝不管理它。