#import、#include和@class的区别

error: fatal error: no input files 背景:之前在Qt中创建类的时候,为了将已存在的类从Qt目录结构树中给移除, 将pro中对应的.h, .cpp, .ui文件给删除了,此时编译,那么该类就会从目录结构树中消失,但是该类对应的(.h, .cpp, .ui)文件依旧存在! 此时再次添加文件时,可能存在SOURCES +=, HEADERS +=, FORMS += 下存在两个连续的“\”, 导致报错! 如下图所示,首先我将src/test系列的.h, .cpp, .ui文件都给删除了,但是再次添加时却出现了两个连续的“\”,导致报错error: 阅读详情

#import && #include:

 

1. 一般来说,导入objective c的头文件时用#import,包含c/c++头文件时用#include。

2. #import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。<mark>

    所以,#import比起#include的好处就是不会引起交叉编译。

#import && #class:

 

1. import会包含这个类的所有信息,包括实体变量和方法(.h文件中),而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,后面会再告诉你。

2. 在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。 而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。

    备注:#import 就是把被引用类的头文件走一遍,即把.h文件里的变量和方法包含进来一次,且仅一次,而@class不用,所以后者编译效率更高。

3. 在编译效率方面考虑,如果你有100个头文件都#import了同一个头文件,或者这些文件是依次引用的,如A–>B, B–>C, C–>D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而是用@class则不会。

4. 如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。

    备注:实践证明,A,B相互#import不会出现编译错误。因为<mark>处已经说明#import时文件只被导入一次,所以此条不成立。

 

总结:

 

    1. 如果不是c/c++,尽量用#import。

    2. 能在实现文件中#import,就不在头文件中#import。

    3. 能在头文件中@class+实现文件中#import,就不在头文件中#import。

Zephyr 开发必备技能:一文搞懂 west manifest 本文深入解析Zephyr项目的westmanifest工具与Manifest文件管理,从基础概念到高级应用。文章首先介绍westmanifest作为Zephyr模块化架构的核心工具,负责管理west.yml文件中的模块信息、Git地址及版本控制。随后详细讲解Manifest文件的基本结构、字段含义,以及westmanifest子命令的使用方法,包括查看内容、冻结版本、验证文件等操作。文章还探讨了Manifest的导入继承机制和在团队协作中的版本管理策略,并给出常见问题排查技巧。最后强调Manifest文件作 阅读详情

相关推荐

unity转微信小游戏:UI大小设置

unity转微信小游戏:UI大小设置

会潜水的小火龙的博客 3273

iOS-#import 和 #include的区别

#import能避免文件被重复包含的问题 1.一般来说,导入objective - c 的头文件时用#import,包含c,c++头文件的时候用#include。 使用include时要注意重复引用的问题:   calssA,classB都引用了classC,classD若引用classA与classB,就会报重复使用的错误。 2.#import确定一个文件只能被导入一次,这是你在递归包含...

MinggeQingchun的博客 1235

Gromacs空蛋白模拟实战:从PDB文件到动力学轨迹的完整流程解析

本文详细解析了使用Gromacs进行空蛋白分子动力学模拟的完整实战流程。从PDB文件处理、力场选择与拓扑构建,到模拟盒子创建、溶剂化与电荷中和,再到能量最小化、NVT/NPT平衡及最终的生产模拟与基础分析,提供了每一步的命令详解和关键注意事项,旨在帮助计算生物学研究者系统掌握这一核心研究工具。

weixin_28454475的博客 276

C++注意的小细节(一)文件开发方式冲突与转换构造函数

1、fstream 打开方式中,ios::app 和 ios::trunc 不能并存。 2、可以让cin作为while循环的条件。

数字的技术博客 888

机器人控制基础:伺服驱动电机 PID 参数自适应控制的实现方法及研究

伺服电机PID参数自适应控制技术研究 摘要:针对伺服驱动电机在动态负载工况下传统PID控制性能下降的问题,本文研究了多种自适应控制方法。通过分析6种主流技术(包括模型参考自适应、模糊逻辑、神经网络等)的原理、实现步骤及适用场景,揭示了负载感知精度、参数调节实时性和系统稳定性三大技术难点,并提出了相应解决方案。以模糊自适应PID为例的实验验证表明,该技术能有效提升伺服系统在变负载条件下的控制性能。研究为工业应用中伺服电机的精确控制提供了重要参考。

start_up_go的博客 828

configure: error: no acceptable C compiler found in $PATH解决方案

本文主要介绍了configure: error: no acceptable C compiler found in $PATH解决方案,希望能对使用Linux的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 4万+

19.5.17笔记and作业

网络编程 from multiprocessing import Process, Queue, Lock from threading import Thread import queue def Jc_A(q): lb=[1,2,3] qa=queue.Queue(3) Xc_A1=Thread(target=XcA1,args=(qa,lb)) Xc_A2=Thread(target=XcA...

peter_fanxing的博客 492

Allegro16.6详细教程(二)

3-D Viewer,可以直接在allegro中看到board file的3-D顯示效果。3-D Viewer對於PCB Editor Products,只有環境變數中的OpenGL顯示功能開啟後才有效,而對於APD/SiP是無效的。2.3-D viewer是在一個獨立的視窗中打開的。3-D environment環境支援多種顯示內容的過濾,取景視角和顯示效果的選項,透過遊標可以直接控制放大,移動,翻轉等操作。

axingxiansen的博客 1920

解决ios - use of @import when modules are disabled问题

第一步: 点击项目->targets->build settings 搜索module将下图两个设置成YES 编译运行,如果问题依然存在那么进入第二布。 第二步:查看项目中是否存在.mm文件,如果存在,可能的原因是您使用objective - c + +。modules不适用c++。于是你有两个选择,1.将@import换成#import。2.不使用objective - c + +

kun_LY的博客 1万+

构建企业级AI税务顾问:优化税收策略与合规

本文深入探讨了构建企业级AI税务顾问的重要性及其在实际应用中的价值。通过分析当前税务领域的挑战和问题,本文详细介绍了AI税务顾问的基本原理、技术架构、核心功能以及实践应用。文章以逐步分析的方式,从背景介绍、核心概念与联系、算法原理讲解、系统分析与架构设计、项目实战到最佳实践与展望,系统性地展示了如何利用AI技术优化税收策略并确保税务合规。文章旨在为企业和税务从业者提供实用的指导,推动AI在税务领域的创新与发展。在当前全球经济一体化的背景下,企业面临着越来越复杂的税务环境。首先,税收法规的复杂性日益增加。

AI天才研究院 1156

ADS基础教程12 - 参数扫描

在硬件设计、仿真以及调试阶段,很多时候需要找到一个合理的参数来使设计处于最优状态。前面所讲的调优方式是其中的最直接的手段。因此,本文将介绍ADS中如何指定元器件的参数为变量,并可以对变量设置相应的约束条件,来实现的变量进行多组参数的仿真结果的展示。在图形显示界面,添加一个Plot,并添加参数结果。此时,结果中会显示出所有的扫描结果。参数扫描的要素包含:新建变量、变量参数设置、扫描模型设置三个方面。如果找不到该图标,在菜单栏单击右键,弹出的对话框将。,弹出的选项卡中,将添加两个变量。点击菜单栏的仿真按钮。

XZ_ZC的博客 8159

#import和#include区别 #import和@class的区别

【转】 #import和#include的区别 (1)使用场合不同 #import是导入Objective-C头文件的关键词,#include是导入C/C++头文件的关键词 (2)重复引用 使用#include需要处理重复引用,#import能防止同一个文件被多次包含,则不需要处理重复引用 #import和@class的区别: (1)包不包含 #import会包含这个类的所有信息(包括实体变量和方...

weixin_45157020的博客 605

AI人工智能 Agent:在仓储物流中的应用

AI人工智能 Agent:在仓储物流中的应用 1. 背景介绍 1.1 问题的由来 仓储物流行业是全球经济运行的基石之一,涉及商品的存储、运输、分拣和配送等多个环节。随着电子商务的普及和消费者对物流速度和精确性的要求不断提高,仓储物流

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 863

#import #include @class的区别

一、#import和#include的区别     当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误,但是使用两次#import的话,不会报错,所以他可以解决重复导入的问题,他会做一次判断,如果已经导入一次就不导入了 二、#import与@class的区别     1.当A->B,B->A时,如果在B

vkjs8imde的博客 479

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

#include和#import区别以及@class作用

对于#import,我想做过iOS开发的人应该都不陌生。在开发过程中,当我们需要声明某一个类时,都需要去引用。而#imclude的话,在我们学习C时就已经知道了,他的作用也是引用声明的意思。在表面上他们的作用似乎都是一样的。但是在具体功能实现方式上,还是有着很大的区别。 一、#import和#include区别 #include声明时相当于拷贝所代表头文件中的声明内容,所以如果使用两次#inc

新的开始,新的启程 1231

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

总结:#import和#include区别 #import和@class的区别 #import<>和#import""的区别

#import和#include的区别 (1)使用场合不同   #import是导入Objective-C头文件的关键词,#include是导入C/C++头文件的关键词 (2)重复引用   使用#include需要处理重复引用,#import能防止同一个文件被多次包含,则不需要处理重复引用 #import和@class的区别: (1)包不包含       #import会包含

zgs_helloworld的博客 4248

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

#import ,#include,@class 的区别

#include         区分 #include 与#include "x.h"的作用         #include :它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.          #include "x.h":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。  

Xiumudiao的专栏 509

OC中 #include、#import、@class 区别

#include         区分 #include 与#include "x.h"的作用         #include :它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.          #include "x.h":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。         在使用#i

小短裤の夏天 874

#include,#import,@class的区别

#include #include <> :用于对系统文件的引用,编译器会在系统文件目录下去查找该文件。 #include "xx.h":用于对用户自定义的文件的引用,编译器首先会去用户目录下查找,然后去安装目录,最后去系统目录查找。 注:使用include要注意重复引用的问题: c...

a1250156的博客 166

#include #import @class区别

1、#include : c语言的预处理指令,将文件的内容在编译的时候拷贝到写指令的地方 2、#import :OC的预处理指令,是#include指令的增强版, 将文件的内容在编译的时候拷贝到写指令的地方 特点:同一个文件无论#import多少次 只会包含一次 相当于#include 加上#pragma once, #import指令在包含文件的时候,底层会先判断这个文件是否被包含 如果被包含就会略过 否则才会包含 ...

yang992510244yang的博客 204

#Import #include @class区别

#import与#include区别: 1,一般来说,导入objective-C头文件时用#import, OC文件中导C/C++也是用的#import,但是C和C++之间倒入文件的时候用#include 2.#import确保一个头文件只能被导入一次,这使你在递归包含中不会出现问题,所以 #import比起#include的好处是不会引起交叉编译 #import与@class区

plpldog的博客 319

#import与#include以及@class的区别与联系

#include        区分 #include &lt;x.h&gt;与#include "x.h"的作用        #include &lt;x.h&gt;:它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.        #include "x.h":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。    ...

等待化茧成蝶的专栏 571

#import #include与@class的区别

#import与@class的区别 1.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你。 2.在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。 而在实现类里面,因为会

baidu_31071595的博客 1108

【转】#include,#import,@class的区别

#include #include <> :用于对系统文件的引用,编译器会在系统文件目录下去查找该文件。 #include "xx.h":用于对用户自定义的文件的引用,编译器首先会去用户目录下查找,然后去安装目录,最后去系统目录查找。 注:使用include要注意重复引用的问题: c...

aycj34508的博客 80

object-C #include #import @class 区别

#include #include <x.h>:它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件. #include "x.h":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。 在使用#include的时候要注意处理重复引用(这也...

aihuangfu1459的博客 94

iOS 开发之#Import #include @class区别

这个我在之前有说过,这次再详细说一下 #import与#include区别: 1,一般来说,导入objective-C头文件时用#import, 包含c/c++头文件时用#import 2.#import确保一个头文件只能被导入一次,这使你在地柜包涵中不会出现问题,所以 #import比起#include的好处是不会引起交叉编译 #import与@class区别: 1.#Import会包

学如逆水行舟 1236
上一篇: NSNotification、delegate和KVO的区别
下一篇: 从数组到类簇的学习总结
xml_eason
博客等级 码龄14年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值