C++ Qt C++;初始化类并从类调用方法w/变量
基本上,我有一个类,它有多个QString值、一个构造函数和一个方法。对象在构造函数中获取其“值”集。然后我需要调用方法,C++ Qt C++;初始化类并从类调用方法w/变量,c++,qt,C++,Qt,基本上,我有一个类,它有多个QString值、一个构造函数和一个方法。对象在构造函数中获取其“值”集。然后我需要调用方法,toString(),使用对象返回指定的值。当我尝试使用非静态数据成员'DisconnectReason::Banked'时,我如何做到这一点。非常感谢您的帮助 类别: class DisconnectReason { public: QString BANNED = "B&"; QString IDLE_TIMEOUT = "it"; QSt
toString()
,使用对象返回指定的值。当我尝试使用非静态数据成员'DisconnectReason::Banked'时,我如何做到这一点。非常感谢您的帮助
类别:
class DisconnectReason
{
public:
QString BANNED = "B&";
QString IDLE_TIMEOUT = "it";
QString KICKED = "k";
QString MANUAL = "man";
QString PING_TIMEOUT = "pt";
QString reason;
DisconnectReason(const QString reason)
{
this->reason = reason;
}
public:
virtual QString toString()
{
return reason;
}
};
Interface.cpp
#include "interface.h"
#include "ui_interface.h"
#include <QDebug>
#include "constants.h"
Interface::Interface(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Interface)
{
ui->setupUi(this);
DisconnectReason *dr = new DisconnectReason(DisconnectReason::BANNED);//Error here
qDebug() << dr->toString();
}
Interface::~Interface()
{
delete ui;
}
#包括“interface.h”
#包括“ui_interface.h”
#包括
#包括“constants.h”
接口::接口(QWidget*父项):
QMainWindow(父级),
ui(新的ui::接口)
{
用户界面->设置用户界面(此);
DisconnectReason*dr=新建DisconnectReason(DisconnectReason::Banked);//此处出错
qDebug()到字符串();
}
接口::~接口()
{
删除用户界面;
}
由于禁用的
变量(和其他变量)被声明为非静态成员,因此不能像断开连接原因::禁用的那样使用它。只能这样使用
有两种选择:
- 将这些变量声明为静态成员
- 使用integral
enum
并在toString
方法中为它们分配字符串
声明静态
如上所示,您不能在类中初始化这些变量。相反,您应该在类外初始化它们(在.cpp
文件中),就像我所做的那样。(只有表达式才能用作静态成员的类内初始化)
这样,使用DisconnectReason::banked
是完全有效的
使用enum
由于banked
变量(和其他变量)被声明为非静态成员,因此不能像DisconnectReason::banked那样使用它。只能这样使用
有两种选择:
- 将这些变量声明为静态成员
- 使用integral
enum
并在toString
方法中为它们分配字符串
声明静态
如上所示,您不能在类中初始化这些变量。相反,您应该在类外初始化它们(在.cpp
文件中),就像我所做的那样。(只有表达式才能用作静态成员的类内初始化)
这样,使用DisconnectReason::banked
是完全有效的
使用enum
这个错误似乎非常清楚——QString并没有声明为静态,但您试图像使用静态一样使用它。您需要实例化DisconnectReason类的一个实例并从中获取字符串,或者使该QString成为静态的。错误似乎非常清楚——QString没有声明为静态的,但您正在尝试使用它,就好像它是静态的一样。您需要实例化DisconnectReason类的一个实例并从中获取字符串,或者将该QString设置为静态。谢谢你,我到家后会试试的!这很有效。但是,我有一个Constants.cpp
,它有一个类的构造函数:Constants
。当我从中得到一个变量时,它表示对'DisconnectReason::banked'的未定义引用
@NicholasJohnson静态
成员应该在.cpp
文件中定义。请参见和。因此,.h?中根本没有变量声明。@NicholasJohnson编辑了我的答案<代码>QString DisconnectReason::banked=“B&”
应该在.cpp
中。这看起来很有希望。谢谢你,我到家后会试试的!这很有效。但是,我有一个Constants.cpp
,它有一个类的构造函数:Constants
。当我从中得到一个变量时,它表示对'DisconnectReason::banked'的未定义引用
@NicholasJohnson静态
成员应该在.cpp
文件中定义。请参见和。因此,.h?中根本没有变量声明。@NicholasJohnson编辑了我的答案<代码>QString DisconnectReason::banked=“B&”代码>应位于.cpp
中。
class DisconnectReason
{
public:
static const QString BANNED;
/* others */
DisconnectReason(const QString &reason)
{
this->reason = reason;
}
virtual QString toString()
{
return reason;
}
};
// .cpp
const QString DisconnectReason::BANNED = "B&";
/* others */
class DisconnectReason
{
public:
enum Reasons {
BANNED,
/* others */
};
DisconnectReason(const Reasons reason)
{
this->reason = reason;
}
virtual QString toString()
{
if(this->reason == BANNED){
return "B&";
}
return "Unknown Reason";
}
};