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

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

你好我有一个 class 函数重载我不想一次又一次地重新输入整个东西所以我创建了具有不同参数的函数见下面的例子我得到编译错误请帮助考虑下面的片段

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*/ 
}

提前致谢。

在 class 之外定义成员函数时,您必须在 class 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*/ 
}

此外,您在 class 定义后缺少分号 ;

另外,请注意我们不能将 non-const 左值引用绑定到右值。所以第二个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 &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) {
}