解决C++中重定义的方法总结
C++由于头文件重复包含了所定义的变量或者常量,编译器就会报重复定义的错误。如果你碰见这样的问题可以考虑重下面几个方面去解决:
1、在出现重定义错误的头文件加上:
#ifndef FileName_H_
#define FileName_H_
....(头文件内容)
#endif
注意如果FileName_H_这个名字已经被使用,将会出现未定义问题(这里不讨论),这是你保证FileName_H_唯一就可以。
2、在出现重定义错误的头文件加上这一句:#pragma once 就可以解决(VS建立的类都会默认添加这一行),方式2与1其实是一样的,二选一即可(个人推荐使用方式1)
采用方式1或方式2基本上可以解决95%以上的重复定义的问题。在开发过程中,经常会使用第三方的API,单独使用某一个API都正常,但是同时使用多个API的时候就会出现某些结构体重复定义的问题,此时可以按照下面几种方式处理:
3、将重复定义的struct、变量名、常量,提出到一个公共的.h文件中,然后将原文件中公共部分的struct、变量名、常量屏蔽或删除,同时在头文件中包含公共的.h文件。
4、如果三防库中,出现C风格、C++风格两种不同的struct定义方式,就不能按照3的方式解决了(方式3解决后编译正常,但是会出现链接问题,分析lib中的导出函数中参数与C风格参数差异)。此时只需要将C风格方式的struct修改为C++风格的struct,同时更新API头文件中对应使用C风格struct位置。
相关推荐
-
解决C++中重定义的方法总结
C++由于头文件重复包含了所定义的变量或者常量,编译器就会报重复定义的错误.如果你碰见这样的问题可以考虑重下面几个方面去解决: 1.在出现重定义错误的头文件加上:#ifndef FileName_H_#define FileName_H_ ....(头文件内容)#endif注意如果FileName_H_这个名字已经被使用,将会出现未定义问题(这里不讨论),这是你保证FileName_H_唯一就可以. 2.在出现重定义错误的头文件加上这一句:#pragma once 就可以解决(VS建立的类都会默
-
解决python中0x80072ee2错误的方法
解决python中出现x80072ee2错误的方法: 在官网上直接下载"python-3.7.2-amd64.exe"并安装即可: 因为如果安装"python-3.7.2-amd64-webinstall.exe",自动访问外网,导致无法访问. 安装错误信息: Setup failed One or more issues caused the setup to fail.Please fix the issues and then retry setup.For
-
java9开始——接口中可以定义private私有方法
在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开始,Interface 接口中允许定义私有方法和私有静态方法.下面我们就来为大家介绍其语法规则,和为什么要有这样的设计. 其实在Java 8之前,还有另一个被广为人之的知识点:接口中所有的方法必须是abstract 抽象方法.但是,从java 8开始接口中可以包含非abstract 方法,如下文中的
-
浅谈PHP中的Trait使用方法
概述 在PHP中有一种代码复用的技术, 因为单继承的问题, 有些公共方法无法在父类中写出, 而 Trait可以应对这种情况, 它可以定义一些复用的方法, 然后在你需要使用的类中将其引入即可. 刚开始的时候给我的感觉就是将trait代码块直接拿到类中的意思, 但后来我发现, 我太天真了. PHP中的Trait用法: 问题 当我第一次使用的时候, 因为之前一直使用抽象类, 或者定义内部对象, 然后调用内部对象中的方法, 所以我当时有了以下几个问题: 1.能否引入多个, 如果可以的话, 同名方法如何处
-
解决java中的父类私有成员变量的继承问题
如果父类中属性为私有(private),那么能否被子类继承呢? 答案是不可以. 我们看如下简单代码 class Father { private String name; public void sayHi() { System.out.println("My name is " + this.name); } } class Son extends Father {} public class PrivateFieldTest { public static void main(St
-
thinkphp框架实现路由重定义简化url访问地址的方法分析
本文实例讲述了thinkphp框架实现路由重定义简化url访问地址的方法.分享给大家供大家参考,具体如下: 如果按照正常访问的话,则需要输入一长串的url地址,这样会显得十分冗长,我可以可以通过对路由规则的重新定义简化url访问地址. <?php namespace app\index\controller; class Index{ public function index(){ return '我是index'; } public function hello($name='World')
-
php中各种定义变量的方法小结
1.定义常量define("CONSTANT", "Hello world."); 常量只能包含标量数据(boolean,integer,float 和 string). 调用常量时,只需要简单的用名称取得常量的值,而不能加"$"符号,如:echo CONSTANT: 注: 常量和(全局)变量在不同的名字空间中.这意味着例如 TRUE 和 $TRUE 是不同的. 2.普通变量$a = "hello"; 3.可变变量(使用两个美
-
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
1.问题描述 在用yolov3训练自己的数据集时,尝试加载预训练的权重,在冻结前154层的基础上,利用自己的数据集finetune. 出现如下错误: load_weights(),got an unexpected keyword argument skip_mismatch 2.解决方法 因为keras旧版本没有这一定义,在新的版本中有这一关键字的定义,因此,更新keras版本至2.1.5即可解决. source activate env pip uninstall keras pip ins
-
vue 解决data中定义图片相对路径页面不显示的问题
vue在data中定义图片相对路径: data() { return { active: 1, icon: { active: "../assets/images/home-selected.png", inactive: "../assets/images/home.png" } }; } 页面使用vant的标签栏自定义图标: <van-tabbar v-model="active"> <van-tabbar-item inf
-
解决idea中maven项目无端显示404错误的方法
问题描述: 有时我们会发现idea中创建的maven项目老是显示项目路径找不到,自己反复检查代码也没发现错误,如何你项目的web.xml是直接由idea默认创建的,而你的头文件又是后来直接用3.1或者更高的版本(推荐3.1版本)覆盖的原来的头文件,那我这篇博客就对你有帮助了. 问题原因: 当我们idea使用maven创建web项目时,idea默认提供的web.xml非常古老,功能不完善.如果我们只是单纯替换其头文件的话是没有用的,idea中web.xml的配置还是没有变. 如何解决: 1.将原来
随机推荐
- 深入解读Lua中迭代器与泛型for的使用
- 在Mac OS中安装Lua的教程
- Vue.js实现一个SPA登录页面的过程【推荐】
- 经常用到的JavasScript事件的翻译
- Java中线程用法总结
- JS Pro-深入面向对象的程序设计之继承的详解
- php 前一天或后一天的日期
- 基于mysql的论坛(3)
- Python中线程的MQ消息队列实现以及消息队列的优点解析
- 详解VUE的状态控制与延时加载刷新
- Nodejs学习笔记之NET模块
- Python字符串替换实例分析
- jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
- jquery 根据name名获取元素的value值
- 整理Javascript数组学习笔记
- Android实现静默安装实例代码
- C++ 读写文件安全又简洁的简单实例
- Android Handler的详细介绍
- c#集合快速排序类实现代码分享
- Winform实现将网页生成图片的方法