Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt:在#ifndef指令中包装Q#u对象声明_Qt_Signals Slots_Preprocessor Directive - Fatal编程技术网

Qt:在#ifndef指令中包装Q#u对象声明

Qt:在#ifndef指令中包装Q#u对象声明,qt,signals-slots,preprocessor-directive,Qt,Signals Slots,Preprocessor Directive,我认为 #ifndef SERVER Q_OBJECT #endif 正在引起 注意:未找到相关类。没有生成输出 从我的编译器。可能是因为Qt预处理器正在查找的Q_对象不受C预处理器指令的影响(或不受其影响)。处理这个问题的正确方法是什么 我这样做是因为我不需要服务器上的信号槽jazz,所以为了提高效率,我取消了该声明 我在Ubuntu 64位上运行Qt 4.8 building in GNU。据我所知,服务器和客户端编译是在同一个顶级项目中完成的,可能会共存。如果客户端希望使用QyO

我认为

#ifndef SERVER
    Q_OBJECT
#endif
正在引起

注意:未找到相关类。没有生成输出

从我的编译器。可能是因为Qt预处理器正在查找的
Q_对象
不受C预处理器指令的影响(或不受其影响)。处理这个问题的正确方法是什么

我这样做是因为我不需要服务器上的信号槽jazz,所以为了提高效率,我取消了该声明


我在Ubuntu 64位上运行Qt 4.8 building in GNU。

据我所知,服务器和客户端编译是在同一个顶级项目中完成的,可能会共存。如果客户端希望使用QyObjor宏而服务器不使用,则该代码是C++的多态性实现,同时具有相同的类名(TopServer):

这里所有实例(服务器、客户端等)都是从top_服务器实例化的

重要的是,服务器类从不调用Q_对象宏,而客户端类实现Q_对象宏

顶级抽象类代码:

抽象类.h

#ifndef ABSTRACT_CLASS_H
#define ABSTRACT_CLASS_H
#include <QString>
class top_Server // Abstract Class
{
public:
    virtual bool method1 (QString,QString) =0;
};
#endif // ABSTRACT_CLASS_H
现在,服务器和客户端的实现被隐藏,并且可以使用相同的类名实例化任何对象,您还可以从一个对象切换到另一个对象:

 top_Server *common_object_name;
然后在某个地方可以使用客户机:

common_object_name = new client;
。。。。 另外还有一台服务器

common_object_name = new server;
成本是知道有两个隐藏类,而优势是显而易见的

(很抱歉,我还不能发表评论,所以我会回答。)

如果可能的话,我建议你用穆罕默德·卡南的方式


否则,Qt的moc在解析代码时会定义
Q\u moc\u RUN
。这样,使用
#ifndef Q#u MOC_RUN[…]#endif
,您可以完全排除MOC处理的代码部分。(参考:)

听起来像是过早优化的例子。运行时没有计算开销,只是元数据的内存开销很小。如果不按预期使用Qt,那么您可能会遇到潜在的麻烦,这些节省是不值得的。当你按计划使用它时,它已经够糟糕的了;)不要让事情变得更糟。@dtech这是编译时或运行时的“内存开销”吗?问这样的问题清楚地表明你不知道自己在做什么。在这种情况下,最好不要这样做;)@Opux,什么是服务器?它是阶级的对象吗?不清楚你想要实现什么。@Opux,这就是你想要的吗?
 top_Server *common_object_name;
common_object_name = new client;
common_object_name = new server;