如何在c++中调用另一个版本的同一版本中的重载函数
how to call overloaded function in the same version of another in c++
问候我有一个函数重载的类,我不想一次又一次地重新键入整件事,所以我创建了具有不同参数的函数。请参阅下面的示例,我遇到了编译错误,请帮助考虑下面的代码段
class A {
public:
inline A();
inline ~A();
QString insert(QString& id, QString& name, QString& email_id, QString& contact_id, QString& reg_num, Address addr, QUrl& urlToLocalFile );
QString insert(QString& id, QString& name, QString& email_id, QString& contact_id, QString& reg_num, Address addr, QString& pathToLocalFile );
}
inline QString insert(QString& id, QString& name, QString& email_id, QString& contact_id, QString& reg_num, Address addr, QUrl& urlToLocalFile ) {
this->insert(id, name, email_id, contact_id, reg_num, addr, urlToLocalFile.toLocalFile()); // throws error no matching member function for call to insert
}
inline QString insert(QString& id, QString& name, QString& email_id, QString& contact_id, QString& reg_num, Address addr, QString& pathToLocalFile ) {
/*some tasks*/
}
提前谢谢。
在类A
的作用域中定义类外的成员函数。这可以使用A::
来完成,如下所示。
class A {
public:
inline A();
inline ~A();
QString insert(QString& id, QString& name, QString& email_id, QString& contact_id, QString& reg_num, Address addr, QUrl& urlToLocalFile );
QString insert(QString& id, QString& name, QString& email_id, QString& contact_id, QString& reg_num, Address addr, const QString& pathToLocalFile ); //note the const added for the last parameter
}; //added missing semicolon here
//note the A:: used below
inline QString A::insert(QString& id, QString& name, QString& email_id, QString& contact_id, QString& reg_num, Address addr, QUrl& urlToLocalFile ) {
this->insert(id, name, email_id, contact_id, reg_num, addr, urlToLocalFile.toLocalFile());
}
//note the const added in the last parameter
inline QString A::insert(QString& id, QString& name, QString& email_id, QString& contact_id, QString& reg_num, Address addr, const QString& pathToLocalFile ) {
/*some tasks*/
}
此外,在类定义之后还缺少分号;
。
另外,请注意,我们不能将非常量左值引用绑定到右值。因此,第二个insert
成员函数的最后一个参数应该是const QString& pathToLocalFile
,而不是QString& pathToLocalFile
问题是通过引用调用。
将QString&
转换为const QString&
即可完成任务。我们可能无法通过string& a = b
和string& c = a
来实现这一点。我们必须使用指针或常量类型。
当然,根据我的理解,这似乎是有效的。
class A {
public:
inline A();
inline ~A();
QString insert(const QString& id, const QString& name, const QString& email_id, const QString& contact_id, const QString& reg_num, Address addr, const QString& pathToLocalFile );
QString insert( const QString& id, const QString& name, const QString& email_id, const QString& contact_id, const QString& reg_num, Address addr, const QUrl& urlToLocalFile );
};
inline QString A::insert(const QString &id, const QString &name, const QString &email_id, const QString &contact_id, const QString ®_num, Address addr, const QUrl &urlToLocalFile) {
return this->insert(id,name,email_id,contact_id,reg_num,addr,urlToLocalFile.toLocalFile());
}
inline QString A::insert(const QString &id, const QString &name, const QString &email_id, const QString &contact_id, const QString ®_num, Address addr, const QString &pathToLocalFile) {
}
相关文章:
- 用符号版本替换对函数的所有调用
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 是否可以使用单个定义定义函数的常量和常规版本?(使用模板,自动,decltype等)
- 用非纯虚拟版本重载纯虚函数
- 重载模板函数未为特定类型选择正确的版本
- Python 的 exec() 函数的 C++ 版本
- "std::function"的简单版本:函数对象的生存期?
- C++14 及更高版本是否允许 Lambda 函数的默认参数?如果是这样,怎么办?
- 在h文件上内联发布版本并在cpp上实现调试版本的函数
- 我可以删除对象的右值版本的函数吗?
- 传递 const int* 和 int* 时调用重载函数的不同版本(const int* const&/&&)
- 触发的断点(析构函数)与类模板类型是自身的一个版本
- opengl32.lib如何在Windows(仅1.1版本)上工作?它是否真正实现了OpenGL函数
- C++14 强制转换以返回成员函数的类型 - 简洁版本
- 所有版本的 GCC 都与默认成员初始值设定项作斗争,该初始值设定项捕获了这一点,并结合了继承的构造函数
- 根据运行时参数调用模板函数的不同版本
- 函数的内联版本返回的值与非内联版本不同
- 如何从非递归版本定义斐波那契函数
- 如何避免const版本函数的代码重复