QT/C++ 私有成员的类声明,对构造函数不可见
QT/C++ class declaration of private member not visible to constructor?
我有一个名为 server
的类,其server.h
如下所示:
class Server : public QTcpServer
{
Q_OBJECT
public:
Server(QHostAddress listenAddress, quint16 listenPort, QObject *parent = 0);
QHostAddress hostAddress;
quint16 hostPort;
protected:
void incomingConnection(qintptr socketDescriptor);
private:
};
server.cpp
如下(部分(:
Server(QHostAddress listenAddress, quint16 listenPort, QObject *parent = 0)
: hostAddress(listenAddress), hostPort(listenPort), QTcpServer(parent)
{
}
问题是我想保持hostAddress
和hostPort
的私密性。但是,当我在类声明中将它们设为私有时,编译器抱怨不允许我的构造函数初始化更改这些私有成员。为什么?构造函数不是在同一个类中,所以它应该能够更改私有变量吗?
为什么?
因为在server.cpp
中您也忘记指定类名,所以您只指定了方法的名称,因此这是全局命名空间中称为Server
的方法。因此,Server
的私人成员无法从中访问。将其定义为
Server::Server(QHostAddress listenAddress, quint16 listenPort, QObject *parent)
: hostAddress(listenAddress), hostPort(listenPort), QTcpServer(parent)
{
}
另请注意,在定义中,您应该省略=0
以使其仅QObject *parent
。可以在声明或定义中指定默认参数值,但不能同时指定两者。通常,您在函数声明中执行此操作,然后所有调用方都可以使用该默认值。请注意:
如果您希望函数的调用方能够看到默认值,则必须在定义中指定此值,如果您改用第二个版本,则只有看到该定义的用户才能使用默认值。如果函数在类中是私有的,则可能需要这样做。
如果您必须要在函数定义中重复默认参数值,可以在注释中执行此操作:
void foo(int x = 42,
int y = 21);
void foo(int x /* = 42 */,
int y /* = 21 */)
{
...
}
将默认参数值放在C++中的什么位置?
也许你的意思是写:
Server::Server(QHostAddress listenAddress, quint16 listenPort, QObject *parent = 0)
: hostAddress(listenAddress), hostPort(listenPort), QTcpServer(parent)
{
}
您忘记了类标识符:
Server::Server(...
然后,对于编译器,您不在成员函数中,您可以访问私有 membres。
相关文章:
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 将派生类的构造函数声明为父类的友元
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- 如何使用构造函数声明指向用户定义对象的指针?
- 如何从构造函数声明新的私有变量?
- 根据二手构造函数声明成员
- 如何用类别的consumetrized构造函数声明使用类的比较对象设置的STL设置
- C++.奇怪的构造函数声明
- 使用ctags查找用c++中的构造函数声明的变量
- 将构造函数声明为private会显示错误.是否至少有一个公共构造函数是必需的
- 如何在C++中使用带参数的构造函数声明具有来自另一个类的类数据的对象
- 在构造函数声明中编写模板类型的参数列表是否有效?
- 在另一个类中使用自定义构造函数声明一个类
- 谷歌测试-构造函数声明错误
- 使用构造函数声明作为虚函数
- 无效地使用不完整的类型模板构造函数声明
- 将构造函数声明为显式时出现编译错误
- 它在构造函数声明中意味着什么
- 类构造函数声明了两次
- 有一种方法可以使用默认的复制构造函数声明复制构造函数非公共和?