如何在c++中调用另一个版本的同一版本中的重载函数

how to call overloaded function in the same version of another in c++

本文关键字:版本 函数 重载 另一个 c++ 调用      更新时间:2024-09-23

问候我有一个函数重载的类,我不想一次又一次地重新键入整件事,所以我创建了具有不同参数的函数。请参阅下面的示例,我遇到了编译错误,请帮助考虑下面的代码段

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 = bstring& 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 &reg_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 &reg_num, Address addr, const QString &pathToLocalFile) {
}