簡體   English   中英

成員對象的調用方法

[英]Calling method from member object

我在調用對象的成員方法時遇到問題,該對象是某個類的成員。 我的意思是? 我有CPosition

cposition.h

#ifndef CPOSITION_H
#define CPOSITION_H

class CPosition
{
public:
    CPosition(QString name, QString description);
    QString toString();

private:
    QString m_name;
    QString m_description;

};

#endif // CPOSITION_H

cposition.cpp

#include <QString>
#include "cposition.h"

CPosition::CPosition(QString name, QString description)
    : m_name(name), m_description(description)
{

}

QString toString()
{
    QString test("Test - method called!");
    return test;
}

然后我有一個CPerson類,其中的一個成員是指向CPosition對象的指針。 在方法CPerson::getPosition CPosition::getPosition僅在存在指針的情況下,我才想調用方法CPosition::getPosition

cperson.h

#ifndef CPERSON_H
#define CPERSON_H

class CPosition;

class CPerson
{
public:
    CPerson(QString name);
    QString getPosition();

private:
    QString m_name;
    CPosition * m_position;
    CEmployer * m_employer;
};

#endif // CPERSON_H

cperson.cpp

#include <QTextStream>
#include <QString>
#include "cperson.h"
#include "cposition.h"

CPerson::CPerson(QString name) : m_name(name){}

QString CPerson::getPosition()
{
    QString str;
    QTextStream cout(&str);
    if(m_position) //here check if pointer exist
    {
        cout << "Position: " << m_position->toString(); //<---- here is problem
    }
    else
        cout << "Position doesn't exist!!!" << endl;
    return str;
}

當我構建這個項目時,我得到一個錯誤:

C:\Qt\Projects\Tutorial\qt2\cperson.cpp:28: error: undefined reference to `CPosition::toString()'

我正在使用QtCreator IDE。 有誰能幫助我解決這個問題或解釋為什么這不起作用?

當您使用以下方法定義toString()方法時

QString toString()
{
   //code
}

cposition.cpp文件中的原型,它不是CPosition類的成員。 這就是為什么當您嘗試從類型為CPosition m_position指針調用此方法時,由於未實現cposition.h文件中未實現的toString()方法而cposition.h未定義的引用錯誤的原因。

從以下位置更改cposition.cpp文件中的toString()方法的原型:

QString toString()

QString CPosition::toString()
{
   //write code here
}

因此,編譯器知道cposition.cpp文件中實現的toString()方法是cposition.cpp文件中聲明的cposition.h

基本上,您沒有為toString方法提供實現。 正確的方法應該是:

QString CPosition::toString()
{
    QString test("Test - method called!");
    return test;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM