[英]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.