精华内容
下载资源
问答
  • 主要介绍了VScode编译C++ 头文件显示not found的问题,本文给大家分享问题解决方法,通过截图的形式给大家介绍的非常详细,需要的朋友可以参考下
  • C++头文件定义类的方法

    万次阅读 多人点赞 2019-06-29 16:52:57
    今天总结一下如何在C++中使用头文件定义一个类,并在另一个文件中进行引用。 部分基础知识 在一个C++程序中,两种基础的文件 头文件(.h)【应该是head的缩写】 源文件(.cpp)【Cplusplus的缩写】 头文件中一般...

    新手在写C++程序定义类的时候,可能会犯一个错误,就是在main函数文件里定义很多类,一个文件中包含很多函数,这样程序看起来很冗杂。今天总结一下如何在C++中使用头文件来定义一个类,并在另一个文件中进行引用。

    部分基础知识

    在一个C++程序中,有两种基础的文件

    1. 头文件(.h)【应该是head的缩写】
    2. 源文件(.cpp)【Cplusplus的缩写】

    头文件中一般是声明类,包括类的成员,方法,还有函数原型,以及一些define等,但是不写出来具体的实现方法,而源文件主要是写类中声明的函数的具体实现方法。

    我们最开始写一个helloword程序的时候会看到使用include来引入一个头文件,目标就是将头文件中的函数声明出来:

    #include<iostream>
    
    using namespace std;
    
    int main()
    {
    	cout<<"HelloWorld"<<endl;
    	return 0;
    }
    

    在C++中要使用cout等标准输入输出函数就必须包含iostrem这个头文件。

    那我们如何声明一个头文件并进行引用呢?接下来我们根据一个具体的问题的实现来进行展示。

    问题

    定义一个复数类,复数类可以执行复数的加减乘除运算以及复数的求模显示等操作。

    方法

    首先我们定义一个头文件“Complex.h”,在这个文件中定义出复数类complex

    #ifndef _Complex_H_
    #define _Complex_H_
    
    class complex
    {
    private:
    	//私有变量实部与虚部
    	double real, imag;
    public:
    	complex();//空的构造函数
    	complex(double, double);//默认参数的构造函数
    	void set(double, double);//设置函数
    	double getReal();//获取实部函数
    	double getImag();//获取虚部函数
    	double module();//获取复数模的函数
    	//复数加减乘除函数
    	complex add(complex);
    	complex decrease(complex);
    	complex multiply(complex);
    	complex divide(complex);
    	//复数显示函数
    	void show();
    };
    
    #endif 
    

    其中包含了成员变量,构造函数,成员函数等,在这个头文件中,我们不写函数们的具体实现方法。

    注意开头的两句与结尾的一句
    #ifndef <标识>
    #define <标识>
    类代码
    #endif
    其中ifndef是if not define的意思,是为了防止头文件的重复包含和编译,例如两个文件都包含了这个头文件,没有这句话可能就会导致重复编译。
    另外,标识一般写成头文件的名字的全大写,同时将点改为下划线,并在前后加上下划线,例如我们的“Complex.h”头文件就写成_Complex_H_

    定义完头文件,我们要新建一个源文件“Complex.cpp”来实现头文件里的每一个方法。源文件的名字与头文件的名字保持一致,并且在源文件中必须include头文件,如下

    #include<stdio.h>
    #include<cmath>
    #include "Complex.h"
    
    complex::complex()
    {
    	real = 0;
    	imag = 0;
    }
    
    complex::complex(double a, double b)
    {
    	real = a;
    	imag = b;
    }
    
    void complex::set(double a, double b)
    {
    	real = a;
    	imag = b;
    }
    
    double complex::getReal()
    {
    	return real;
    }
    
    double complex::getImag()
    {
    	return imag;
    }
    
    double complex::module()
    {
    	return sqrt(real * real + imag * imag);
    }
    
    complex complex::add(complex a)
    {
    	double real = this->real + a.getReal();
    	double imag = this->imag + a.getImag();
    	return complex(real, imag);
    }
    
    complex complex::decrease(complex a)
    {
    	double real = this->real - a.getReal();
    	double imag = this->imag - a.getImag();
    	return complex(real, imag);
    }
    
    complex complex::multiply(complex C)
    {
    	double a, b, c, d;
    	a = real;
    	b = imag;
    	c = C.real;
    	d = C.imag;
    	double real = (a * c - b * d);
    	double imag = (b * c + a * d);
    	return complex(real,imag);
    }
    
    complex complex::divide(complex C)
    {
    	double a, b, c, d;
    	a = real;
    	b = imag;
    	c = C.real;
    	d = C.imag;
    	double real = (a * c + b * d) / (c * c + d * d);
    	double imag = (b * c - a * d) / (c * c + d * d);
    	return complex(real,imag);
    }
    
    void complex::show()
    {
    	if (imag >= 0)
    	{
    		printf("%.2f+%.2fi", real, imag);
    	}
    	else
    	{
    		printf("%.2f%.2fi", real, imag);
    	}
    	return;
    }
    

    定义完头文件以及源文件,我们就可以新建一个测试文件“main.cpp”来测试我们的头文件类是否成功。
    在该文件中引入头文件“Complex.h”就可以调用其中的complex类了

    #include "Complex.h"
    #include<stdio.h>
    
    int main()
    {
    	complex A;//验证默认构造函数
    	printf("A为:"); A.show(); printf("\n");
    	complex B(2,-1);//验证两个参数构造函数
    	printf("B为:"); B.show(); printf("\n");
    	A.set(3,5);//验证设置函数;
    	printf("A为:"); A.show(); printf("\n");
    	//验证模函数
    	printf("A的模为:%.2f\n", A.module());
    	//验证加减乘除
    	complex C;
    	C = A.add(B);
    	printf("A+B为:"); C.show(); printf("\n");
    	C = A.decrease(B);
    	printf("A-B为:"); C.show(); printf("\n");
    	C = A.multiply(B);
    	printf("A*B为:"); C.show(); printf("\n");
    	C = A.divide(B);
    	printf("A/B为:"); C.show(); printf("\n");
    	return 0;
    }
    

    此时的工程目录为
    在这里插入图片描述
    运行结果为
    在这里插入图片描述
    测试结果符合预期,说明该复数类构建成功,以后如果要使用复数计算的相关功能,就可以直接include这个头文件调用这个类了。

    小提示:
    在最新的Visual studio开发环境中,定义头文件函数的时候,有的函数下会有绿色的波浪线,这是在提醒你这个函数没有具体的实现方法。
    在这里插入图片描述
    这时候点击“显示可能的修补程序”->“创建“xxx”的定义(在******.cpp中)”
    在这里插入图片描述
    就会自动在相应的cpp文件中写好相同的函数
    在这里插入图片描述
    以上

    展开全文
  • 头文件多重定义问题(ifndef)

    千次阅读 2019-05-08 16:07:07
    ifndef 宏定义 #ifndef和#endif配套使用,分别加在头文件的开头和结尾,避免再功能实现函数中出现多重定义的问题。 一般用法:

    ifndef

    宏定义 #ifndef和#endif配套使用,分别加在头文件的开头和结尾,避免再功能实现函数中出现多重定义的问题。
    一般用法:
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 前言  总看到一些地方说定义语句别放在头文件中,因为会引起重... 情况一:多个源文件包含了同一个头文件时,如果头文件某个局部变量或者非内联函数的定义,那么相当于每个源文件都把该局部变量或者非内联函

    前言

           总看到一些地方说定义语句别放在头文件中,因为会引起重定义。但具体编程中,却发现有些定义又不得不放在头文件中(比如类定义)。

           这可如何是好?基于对这个问题的思考,有了这篇随笔。

    重定义产生的情况

           情况一:多个源文件包含了同一个头文件时,如果头文件中有某个局部变量或者非内联函数的定义,那么相当于每个源文件都把该局部变量或者非内联函数定义了一次。而它们(局部变量或者非内联函数)在这种情况下默认又是全局的,那么自然会导致重定义错误。
           情况二:某个源文件多次包含同一个头文件时(即一个源文件包含多个头文件,但其中某几个头文件又包含了同一个头文件),如果头文件中有定义语句,那么不管是什么东西的定义,都会产生重定义错误。

    解决方法

           针对情况一:我们应避免在头文件中定义局部变量或者非内联函数。而由于编译器会将类,内联函数以及const变量默认视为定义它们的源文件所私有,因此它们(类,内联函数以及const变量)可以定义在头文件中。
           针对情况二:我们可以在头文件中使用一种叫做头文件保护符的东西,格式如下:

    1 #ifndef A_H
    2 #define A_H
    3 
    4 /* 这里写真正的头文件 */
    5 
    6 #endif

            这样就能保证头文件不会被某个源文件重复包含。不但避免了一种重定义的情况,还能使得程序的效率提高,何乐而不用呢?

    总结

           只要我们的代码做到上述“解决方法”中的那两点,头文件的重定义问题就基本解决了。


    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    转载自:穆晨

    链接自:http://www.cnblogs.com/muchen/p/6138110.html

    展开全文
  • 标题 单片机编程中出现包含头文件还是有一些函数变量没有定义的原因 include头文件的顺序应该按照头文件的调用顺序进行include 如:在写计时函数时如果用到内核函数或变量时,头文件应该#include “core_cm3.h...

    标题 单片机编程中出现有包含头文件但还是有一些函数变量没有定义的原因

    include头文件的顺序应该按照头文件的调用顺序进行include

    如:在写计时函数时如果用到内核函数或变量时,头文件应该有#include “core_cm3.h”,计时器一般用到中断函数来计算时间循环次数,所以还需要#include “stm32f10x.h” 。这个时候就有问题了,两个头文件的包含顺序是否会影响头文件的调用。
    经过查看可以知道“core_cm3.h”中有一个函数如下:

    static __INLINE uint32_t SysTick_Config(uint32_t ticks)
    { 
      if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */
                                                                   
      SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */
      NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Cortex-M0 System Interrupts */
      SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */
      SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | 
                       SysTick_CTRL_TICKINT_Msk   | 
                       SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
      return (0);                                                  /* Function successful */
    }
    在这里插入代码片
    

    SysTick_IRQn等是定义在“stm32f10x.h”中的,如果头文件是先#include“core_cm3.h”再#include“stm32f10x.h”,则会出错,core_cm3.h比较特别就在这个头文件里面有函数源码,在包含时应该使里面的宏定义有效

    展开全文
  • 已经包含头文件还是报错未定义标示符怎么解决? 代码如下 <code class="language-cpp">#include<stdio.h> #include<Windows.h> int main() { Sleep(15000); PostMessage(hwnd,WM_CHAR, '...
  • 一、同一头文件中类嵌套的疑问假设我们两个类A和B,分别定义在各自的头文件A.h和B.h中,但是在A中要用到B,B中也要用到A,像下面的写法是错误的: class B;class A { public: B b; };class B { public: ...
  • 其他的关于重复定义的解决方法大神们都说得很多了。 而我这个真的让人生气。我用的vs2008。该做的都做好了还显示未定义。 所以我怒关软件重新打开。。好了不显示错误了!! 笑死了
  • #endif二、如果在头文件里面定义了变量例如int a可能会导致重定义的出现,如果出现了变量的重定义,则把在头文件定义的变量放在源文件中定义(不能放在头文件定义),然后在头文件中声明该变量extern int a;...
  • 简单粗暴,直接说明解决方法和问题原因: 一看这个图片就明白原因了吧,哈哈。头文件定义和里面的def名定义不一致。
  • test.cpp: #include"head.h" int i=3; main.cpp #include"head.h" #include using namespace std; extern int i; int main(){ cout ; ...这个项目出现了重定义的问题,不知道为什么?求解答
  • 警告:隐式声明函数‘config_setting_lookup’ [-Wimplicit-function-declaration] config_setting_t* loggers = config_setting_lookup(setting, "loggers");... 头文件我已经添加。#include <libconfig.h>
  • 头文件定义全局变量

    千次阅读 2020-08-14 21:11:05
    这些天写的程序中用到了全局变量,一开始是在一个文件下做测试后来把文件按逻辑拆分了一下,不同的代码被放在了几个文件中,最后用Makefile来编译就遇到了今天的话题,怎么在头文件定义全局变量呢? 做法 要想一个...
  • 可以定义,但是不推荐在头文件定义变量。 因为很多.c文件都可以包含.h文件,也就是说这个变量会在很多.c文件中存在一个副本。假如这是一个多文件项目,在连接阶段,连接器就会抱怨存在多个相同变量名的全局变量,...
  • 头文件中.h中包含变量定义的时候,一般是想作为全局变量来使用,但是使用中总是出现multiple definition of的问题,看一下: oracleinfclass.h #ifndef ORACLEINFCLASS_H_ #define ORACLEINFCLASS_H_ int i; ...
  • 头文件是拓展名为.h的文件,其包含了函数的声明和宏定义,它可以被多个源文件引用共享。头文件分为两种类型:编译器自带的系统头文件和程序员即用户编写的头文件。 引用头文件 1、引用系统头文件 编译器自带的系统...
  • 添加了头文件显示未定义标识符

    千次阅读 2019-04-11 11:47:28
    #include<...//我看到网上的说这俩换个顺序就行了,然而没有用 int main() { long f1, f2; int i; f1 = f2 = 1; for (i = 1; i <= 20; i++) { std::cout << f1 << setw(12) &...
  • 解决方法:在头文件语句下面添加一行 using namespace std;
  • 一下几点原则: (1)公有接口与私有实现分析 (2)类声明·与成员函数的定义分离 比如在实现类相关的程序时,通常将类的声明和成员函数的定义分开:将类的声明放入.h文件中,而将类成员函数的实现放在.cp文件中。...
  • C++声明、定义、类的定义头文件作用、头文件重复引用,不具名空间 转自:http://www.cnblogs.com/rocketfan/archive/2009/10/02/1577361.html  首先说我的补充:(对声明和定义的深入理解和总结) 关于...
  • vs2013配置SSBA库,头文件都包含了,但是调用结构体时,还是显示未定义标识符 错误 51 error C2065: “CommonInternalsMetricBundleOptimizer”: 未声明的标识符 G:\opencv\程序设计\程序设计\main.cpp 1996 1程序...
  • C语言有头文件但是说gets仍然未定义0ss666182018.12.22浏览19次分享举报#include#include#include/*intchdir(char*path){chdir("C:\\Users\\dell\\Desktop\\Dataset");}*/intmain(intargc,char*argv[]){inti=0;...
  • ​ 今天在一个.h头文件定义了一个全局变量,然后在两个.cpp文件中引用了该头文件,导致变量重复定义问题。 ​ 我们知道,变量声明和定义,声明可以多次,但是定义只能一次。打个比方: //a.h文件 int a; ...
  • 在项目开发中,头文件与源文件分开的具体理解: ​ 例如下面一段程序: // head1.h中 #ifndef _HEAD1_H #define _HEAD1_H int x #endif // head1.cpp中 // main.cpp中 ...即重定义, 这是为什么呢,不是已经
  • 标准C语言头文件 ISO C标准定义头文件(24项) “assert.h” 验证程序断言 “complex.h” 支持复数算术运算 “ctype.h” 字符类型 “errno.h” 出错码 “fenv.h” 浮点环境 “float.h” 浮点常量 “inttypes...
  • 其实很多地方也讲了不建议把变量定义头文件中,而应该定义在源文件中,然后在对应的头文件中用extern声明。当然如果你在头文件定义了变量,请做到以下几点: 1、确保该头文件在整个工程中只被包含一次。 2、...
  • C++无法在头文件定义string类数据

    千次阅读 2020-05-03 21:08:11
    //头文件中不仅要包含<string>,也要加上命名空间 //.h文件 #include <string> using namespace std; //或者使用 //std::string
  • lcd1602头文件定义

    2011-03-10 19:55:14
    关于LCD1602的头文件,考到目录下,写上头文件就可以使用。函数在头文件
  • C++中定义NULL的头文件

    2018-03-12 15:07:00
    NULL不是C语言基本类型,其定义在stddef.h...所以几乎包含任意的C++标准头文件都会把这个宏引入。 其定义在cstddef文件中。 其实编译器内置的NULL类型,比如__null等 转载于:https://www.cnblogs.com/azbane/p...
  • 在使用vs过程中出现明明包含头文件显示未包含头文件。 出现的原因: 以上图为例,这个文件中的.sln执行文件和下图中的.vcxproj 中的头文件路径包含可能存在不一致,因为外面的.sln文件运行和里面的文件可能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 158,134
精华内容 63,253
关键字:

有头文件还是显示没定义

友情链接: dmdwmaterial.rar