我在调用某个类的成员对象的成员方法时遇到问题。我的意思是说?我上课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
:
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。有没有人可以帮我解决这个问题或解释为什么这不起作用?
答案 0 :(得分:2)
使用
定义toString()
方法时
QString toString()
{
//code
}
原型在cposition.cpp
文件中,它不是CPosition
类的成员。这就是为什么当你尝试从类型为m_position
的{{1}}指针调用此方法时,你会得到未定义的引用错误,因为你没有在{{1}中实现decalred CPosition
方法文件。
从
更改toString()
文件中cposition.h
方法的原型
toString()
到
cposition.cpp
以便编译器知道QString toString()
文件中实现的QString CPosition::toString()
{
//write code here
}
方法是toString()
文件中声明的方法。
答案 1 :(得分:1)
基本上,您没有为toString
方法提供实现。正确的方法应该是:
QString CPosition::toString()
{
QString test("Test - method called!");
return test;
}