静态成员变量初始化问题。关于 error LNK2005 static int:已经在***.obj中定义

地心地固坐标系与北天东坐标系的转换 经过这一步旋转,x3轴和y3轴就处在过O3点的经度线所在的平面了,而且z3轴指向了东。将图3的坐标系旋转成图2的样子。这里需要多次旋转,每次以某个轴为对称轴进行旋转,对应的坐标变换参考。的原点在地心,Z轴指向北极点,X轴指向本初子午线与赤道的交点,Y轴指向符合右手定则,如下图所示。下面实现地心地固坐标系到北天东坐标系的转换,问题描述为:设一点。以y1轴为对称轴,顺时针旋转90°,得到图4的样子。,X轴指向北,Y轴指向天,Z轴指向东,如下图所示。因此,北天东坐标下的坐标为。点在图3坐标系下的坐标。 阅读详情

这两天一直做C++的内容,我在一个类里使用了一个静态成员函数,但是在使用的时候总是报错

比如这样子 

错误 1  error LNK2005: "public: static int c1::i" (?i@c1@@2HA) 已经在 c1.obj 中定义

根据我在网上查资料,主要原因有以下三种:

1.重复定义全局变量。

2.头文件的包含重复。

3.使用第三方的库造成的。

但是我的原因不属于刚才所提到的三种,我的程序代码并没有太多了.h文件,也没有复杂的包含关系。

大家都知道,在类里定义静态对象的时候,必须立刻在类外初始化,否则就会报错。给大家举个例子。

c2类是c1类的子类,如下:

c1.h

[cpp]  view plain  copy
  1. #pragma once  
  2. class c1  
  3. {  
  4. public:  
  5.     c1(void);  
  6.     ~c1(void);  
  7.     static int i;  
  8. };  
  9.   
  10. int c1::i=0;  
c1.cpp
[cpp]  view plain  copy
  1. #include "c1.h"  
  2. c1::c1(void)  
  3. {  
  4. }  
  5.   
  6.   
  7. c1::~c1(void)  
  8. {  
  9. }  

c2.h

[cpp]  view plain  copy
  1.   
[cpp]  view plain  copy
  1. #pragma once  
  2. #include "c1.h"  
  3. class c2 :  
  4.     public c1  
  5. {  
  6. public:  
  7.     c2(void);  
  8.     ~c2(void);  
  9. };  
c2.cpp
[cpp]  view plain  copy
  1. #include "c2.h"  
  2. c2::c2(void)  
  3. {  
  4. }  
  5.   
  6.   
  7. c2::~c2(void)  
  8. {  
  9. }  

我在c1.h后面立刻对静态变量i进行初始化,生成解决方案,然后报错

错误 1  error LNK2005: "public: static int c1::i" (?i@c1@@2HA) 已经在 c1.obj 中定义

错误 2  error LNK1169: 找到一个或多个多重定义的符号


只要两个或者以上的.cpp同时包含了一个定义了变量的.h文件,就会提示错误.


在网上查资料以后,在这里找到了答案,http://akheyun.blog.163.com/blog/static/138249276201062221452697/

有1.cpp和2.cpp, 1.cpp包含1.h, 2.cpp只包含2.h 但是2.h包含了1.h.. 所以1.h中定义的变量编译的时候会在2.cpp中有定义. 于是乎2.cpp翻译成的obj里也会有定义, 结果导致提示obj里重定义。

因此,我们要做的就是,不要在.h里面初始化静态成员变量,初始化静态变量的工作放到.cpp里面去完成

像这样就好了。

c1.cpp

[cpp]  view plain  copy
  1. #include "c1.h"  
  2.   
  3. int c1::i=0;  
  4. c1::c1(void)  
  5. {  
  6. }  
  7.   
  8.   
  9. c1::~c1(void)  
  10. {  
  11. }  
生产实习-实习报告-Raspberry Pi的应用 生产实习-Raspberry Pi的应用 一.设计任务: 1、搭建树莓派开发环境 主要包括烧录树莓派操作系统,远程访问树莓派,树莓派接口配置以及树莓派与windows实现文件共享等。 2、树莓派的基本操作 控制GPIO点亮LED灯以及树莓派舵机云台控制 3、安装OpenCV及图像采集实验 OpenCV配合树莓派,直接读取来自树莓派摄像头Pi Camera的视频,进行人脸识别、边缘检测、颜色判别等各种计算机视觉开发。 4、树莓派小车远程Wi-Fi控制 使用树莓派驱动L298N,用树莓派板载Wi-Fi控制 阅读详情

相关推荐

电阻应变式力传感器

电阻应变式力传感器

lu_fresh_student的博客 5075

C++排雷:27.error:LNK2005 已经在*.obj中定义 的原因分析及对策

https://www.cnblogs.com/MuyouSome/p/3332699.html

今天写代码了吗 1万+

为什么需要知识图谱?什么是知识图谱?——KG的前世今生

我的知乎专栏,对知识图谱感兴趣的朋友可以关注。标题的命名顺序可能让有的读者不太习惯。通常在介绍一个陌生事物的应用前,我们先给出其定义。之所以换个顺序,是为了不让读者一开始就接触比较冰冷生硬的概念刻板描述(后面我尽量用更具体、准确的例子来表达),另一方面也是为了通过现实生活中的例子自然的引入知识图谱的概念。希望通过这种方式加深读者的印象和理解。为了减轻读者理解的负担,我尽可能地避免引入过多的概念和技术

SimmerChan的专栏 8万+

error:LNK2005 函数已经在*.obj中定义

出现上面的错误,只要原因有如下几个: 1.头文件的重复包含 包含的头文件中含有变量、函数、类的定义,在其他使用的地方多次包含,造成重复包含,产生LNK2005错误, 有两种解决方法: 1)使用宏 在头文件head.h中加入 #ifndef HEAD_H_ //这个地方写法有不少 #define HEAD_H_ ...... #endif 2)使用预编译,文件开头加入 #pr...

hanzhen7541的博客 2万+

发票OFD格式转换成PDF

发票OFD格式转换成PDF

Be_insighted的博客 931

实战解析:利用Python requests库高效抓取京东商品评论并构建结构化数据集

本文详细介绍了如何利用Python requests库高效抓取京东商品评论并构建结构化数据集。通过分析京东评论接口、处理反爬机制以及数据解析存储,帮助开发者快速获取电商数据,适用于竞品监控、用户画像构建等商业场景。

weixin_42526415的博客 837

【常见问题】error LNK2005: 函数已经在某文件中定义

出现背景: 在尝试用cmake编译调用yolo网络的c++项目时 出现问题: main 已经在detect_cuda_compute_capabilities.obj 中定义 错误说明: 其实就是一个重定义问题 解决方法: 打开项目的解决方案管理器,在项目文件中找到出现重复定义的文件,右键移除项目即可。 ...

W9XM96的博客 847

【AI编程】Qoder AI 编程工具从部署到深度使用实战详解

Qoder AI 编程工具从部署到深度使用实战详解

congge 8339

c语言中static关键字用法详解

概述 static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。 但是对于c语言初学者,static由于使用灵活,并不容易掌握。本文就static在c语言中的应用进行总结,供参考使用。错漏之处,请不吝指正。 在程序中使用static 变量 1. 局部变量 普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰...

guotianqing的博客 71万+

【我的Android进阶之旅】解决android应用使用android:persistent属性带来的系统Launcher应用必须重启设备才生效的问题,大幅度提升开发效率

一、问题描述 我们在开发系统级别应用,比如Launcher桌面的时候,会发现有个问题:每次Launcher修改完代码,重新编译之后,安装到android设备上之后,必须重启才会生效。否则就是使用了之前的Launcher版本的内容。而每次重启设备得一分钟左右,太慢了,太影响效率了! 1.1 痛点 每次更新完代码,重新安装之后,必须重启设备才会生效。效率太TM低了! 二、分析问题 经过一轮代码排查,最终发现是因为src\main\AndroidManifest.xml文件中,定义application使用了an

字节卷动 1713

XDMA Scatter-Gather(SG)模式

XDMA Scatter-Gather(SG)模式 是 Xilinx FPGA 中用于高效处理 ​非连续内存数据 的 DMA 传输机制,通过 ​描述符链表(Descriptor List)​ 管理多块分散数据,显著减少 CPU 开销并提升吞吐量。

浩瀚之水的专栏 2133

error LNK2005 已经在 obj 中定义 错误

>> : error LNK2005: ×××× (★★★★) 已经在 ※※※.obj 中定义   通常是由于在.h文件里定义了此变量,移动到.cpp文件里即可。 并在使用到这个变量的cpp文件中加上extern int ID;   出错原因: 无意中遇到了这样的编译问题, 于是google,发现在.h文件里定义变量,发生这问题的概率是灰常大的.

jimmy1357的专栏 1万+

MATLAB - 激光雷达 - 相机联合标定(Lidar-Camera Calibration)

激光雷达传感器和相机通常在自动驾驶应用中结合使用,因为激光雷达传感器收集三维空间信息,而相机则以二维图像捕捉空间的外观和纹理。您可以融合来自这些传感器的数据来改进物体检测和分类。激光雷达-相机标定可以估算出一个变换矩阵,给出两个传感器之间的相对旋转和平移。在进行激光雷达-相机数据融合时,您可以使用该矩阵。本图说明了激光雷达和相机标定 (LCC) 过程的工作流程,我们使用棋盘格作为标定对象。我们从激光雷达和相机数据中提取棋盘角和平面,然后在它们的坐标系之间建立几何关系,进行标定。

机器人控制与仿真应用 7370

LINK 2005错误。*** 已经在*.obj文件中定义_马鸿凯_新浪博客

为什么会出现这个错误??“error LNK2005: 已经在aaa.obj中定义”编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。 我出现的错误是 : 严重性代码说明项目文件行 ​错误LNK2005" char * FILEPATH" (?FILEPATH@@3P...

Ma_Hong_Kai的博客 392

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

c++ “error LNK2005: 已经在*.obj中定义” 错误

vs2019中 c++ “error LNK2005: 已经在*.obj中定义” 错误 符号对象中已定义 符号符号已多次定义。 此错误后跟错误LNK1169。 解决办法 在 属性->配置属性->链接器->命令行中添加 /FORCE:MULTIPLE 即可 ...

forFamily 771

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LNK2005 已经在*.obj中定义 排雷

项目场景在写c的时候使用#include调用同级目录下另一文件中的函数时,出现LNK2005已经在*.obj中定义错误。

fuyouliyang的博客 778

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++ 基类中静态成员初始化问题、基类头文件中定义类外变量重定义问题的解决过程

今天需要在基类中定义一个静态list以供所有继承此基类的成员使用,去掉无关函数,简单示例如下 //基类头文件 #pragma once #include <list> class base { public: static std::list<void*> deleteptr; }; //继承类A头文件 #pragma once #include "base.h" cl...

a553455的博客 3294

C++编译时引起Lnk2005错误的几种情况与解决办法

(1)重复定义全局变量。解决办法,在单个cpp文件中定义变量如 int g_iCounter,其它位置使用此变量时,用extern关键字进行修饰,如extern int g_iCounter。 (2)头文件重复包含。解决办法,在头文件中加入相应宏:   #ifndef MY_H_FILE       //如果没有定义这个宏    #define MY_H_FILE       //定义这个

Zr‘s code world 4848

已在.obj中定义

全局变量就放在头文件内,加上static关键字;局部变量放到cpp文件内;为所有的函数增加CPP,声明在头文件,定义在CPP内。

z15f34的博客 1921

静态成员变量初始化的编译错误LNK 2005

@[TOC] (静态成员变量初始化导致的LNK 2005)

qq_42538017的博客 1004

static

1、什么是static?        static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。 2、为什么要引入static?        函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现?

yuhan_9204的专栏 488

静态变量的初始化

今天做一个单例的模式,这个模式经常用,里面的东西已经很熟悉了,结果确耽误了我20多分钟 原因:类内的变量没有初始化,结果调用的时候会报错! 类内的成员初始化,需要再cpp中,而且1、前面不需要加static了;2、必须加类的作用域标识符,即(XXX::);3、作用域的标识符前面必须加上变量的类型。 作为一个4年多的老程序员,上面的3个错误我都犯了,搞了我近半小时,汗颜呀,写个博客记录下,欢迎

dwhghw的博客 736

error LNK2005:"XXX已经在 XXX.obj 中定义

今天第一次遇到多文件包含的问题,一般来说C++开发都是声明放在头文件里,实现放在源文件里,然后使用时包含头文件,头文件为了避免被重复编译,一般来说要加个杂注“#pragma once ”,或者直接用“#ifndef XXX ....#endif”来处理。好吧,这些我都知道,偏偏各种办法都用遍了,extern也加了,就是一直给我报下面那个错: 折腾了半天,终于让我给折腾好了。

Thuantanon的博客 7766

类的静态成员变量为什么不能再h文件类外初始化

//h文件 class Image { public: static void AddProtoType(Image* iamge) { Prototype[nsize_++] = iamge; } private: static Image* Prototype[10]; static int nsize_; }; int Image::nsize_ = 0; Image* Image::Prototype[]; 报错如下: 原因: 静态成员属于整个类,而不属于某个.

sinat_38363122的博客 877

编译报错系列#2: .obj报错问题

编译报错系列#2: .obj报错问题 qt creator跑代码的时候,有时会出现报错:“无法识别标识符……XXX文件未找到”,而且报错文件是.obj文件,怀疑原因是新增了.cpp和.h文件,编译器未添加导致,这时候一般只需要清理项目——执行qmake——重新编译即可。 ...

m0_44977751的博客 1835

vs2017中 c++ “error LNK2005: 已经在*.obj中定义” 错误

vs2017中 c++ “error LNK2005: 已经在*.obj中定义” 错误 符号对象中已定义 符号符号已多次定义。 此错误后跟错误LNK1169。 解决办法 在 属性->配置属性->链接器->命令行中添加 /FORCE:MULTIPLE 即可 ...

baidu_39418573的博客 7377
上一篇: 《Visual C++ 2010入门经典》(第五版)-第七章 自定义数据类型
下一篇: 统计实例的个数:通过声明类的静态数据成员方式解决
明月清风-精进不止
博客等级 码龄18年 78粉丝 408原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值