静态成员变量的初始化,以及可能引发的multiple define问题

2023-11-09

静态成员变量的初始化,以及可能引发的multiple define问题

先说个人问题的解决方式:不要再头文件中定义静态成员变量

示例

// test.h
#ifndef TEST_H_
#define TEST_H_

class hh{
    static int s;
    int i;
}

int hh::s;// 这里非常容易引发multiple define

#endif

如果程序不复杂只有一个类无所谓在哪里定义了。

如果程序中比较复杂有类之间包含等等,就会非常容易出现multiple define问题。

错误示例

// son.h
#ifndef SON_H_
#define SON_H_

class son {
public:
    int j;
    static int s;
    void printinfo();
};
int son::s;

#endif

// son.cpp
#include "son.h"
#include <iostream>

void son::printinfo(){
    std::cout<< s << " " << j << std::endl;
}

// parent.h
#ifndef PARENT_H_
#define PARENT_H_

#include "son.h"

class parent{
public:
    son s_;
    int i;
    void printsoninfo();
};
#endif

// parent.cpp
#include "parent.h"

void parent::printsoninfo(){
    s_.printinfo();
}


// main.cpp
#include "parent.h"

int main()
{
    parent p;
    p.printsoninfo();
    return 0;
}

编译就会包multiple defined

$$$$$$ g++ --std=c++11 son.cpp parent.cpp main.cpp -o test
/tmp/ccRvoLWL.o:(.bss+0x0): multiple definition of `son::s'
/tmp/ccybTDI7.o:(.bss+0x0): first defined here
/tmp/ccAFIodq.o:(.bss+0x0): multiple definition of `son::s'
/tmp/ccybTDI7.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status

推荐定义的地方:

定义在.cpp或main.cpp中,这样文件就会解决啦

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态成员变量的初始化,以及可能引发的multiple define问题 的相关文章

  • 当从后台工作程序发生事件时,XlCall.Excel(XlCall.xlcCalculateNow) 抛出 XlCallException

    我有一个 ExcelFunction 来排队一些计算 ExcelFunction public static void QueueCalcs takes ranges var calcRequests builds list of calc
  • 从 Invoke 方法获取 RETURN

    我正在尝试从另一个线程上的列表框项目中读取值 我尝试创建一种新方法来运行调用命令 我可以设法将命令发送到列表框 例如通过调用方法添加 但我似乎无法得到响应 我似乎无法获取该项目的值 我尝试了几种方法 一旦我将它从空变为字符串 事情就开始变得
  • C# 和月历,选择多个日期

    我正在制作一个程序 可以帮助人们用 C 为某个部门 预订 订单 他们需要能够选择不同月份的多个日期 我更愿意拥有它 这样他们就可以单击一个日期 然后按住 Shift 键单击另一个日期以选择这两个日期之间的所有日期 并控制单击以进行单选 取消
  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • 虚拟并行端口模拟器

    在我的计算机网络课程中 我们应该通过使用本机寄存器 例如使用 outportb 等命令 来学习并行端口编程 我没有并行端口 因为我住在 2011 年 但想练习这些程序 我使用 dosbox 安装了旧的 Turboc 3 IDE 有没有一个程
  • 关闭整数的最右边设置位

    我只需要关闭最右边的设置位即可 我的方法是找到最右边位的位置 然后离开该位 我编写这段代码是为了这样做 int POS int n int p 0 while n if n 2 0 p else break n n 2 return p i
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 无法获取本地或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化掉

    Visual Studio 2010 会删除 没有其他词 不安全块中函数参数之一中的数据 什么可能导致此错误 调试器显示以下消息 Cannot obtain value of local or argument as it is not a
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • 如何在 EF Core 2.1 中定义外键关系

    我的 DAL 使用 EF Core 2 1 这就是我的模型的样子 一名用户只能拥有一种角色 Role entity kind of master public class Role public int RoleId get set pub
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • WinForms - 加载表单时如何使用 PaintEventArgs 运行函数?

    我试图理解图形 在 Graphics FromImage 文档中 它有这样的示例 private void FromImageImage PaintEventArgs e Create image Image imageFile Image
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 在 Qt 中播放通知(频率 x)声音 - 最简单的方法?

    Qt 5 1 或更高版本 我需要播放频率为 x 的通知声音 n 毫秒 如果我能像这样组合音调那就太好了 1000Hz 持续 2 秒 然后 3000Hz 持续 1 秒 最简单的方法是使用文件 WAV MP3 例如如此处所述 如何用Qt播放声音
  • 解释这段代码的工作原理;子进程如何返回值以及在哪里返回值?

    我不明白子进程如何返回该值以及返回给谁 输出为 6 7 问题来源 http www cs utexas edu mwalfish classes s11 cs372h hw sol1 html http www cs utexas edu
  • 值和类型的简洁双向静态 1:1 映射

    我将从我想象如何使用我想要创建的代码开始 它不必完全像这样 但它是我在标题中所说的 简洁 的一个很好的例子 就我而言 它是将类型映射到相关的枚举值 struct bar foo
  • MSVC编译器下使用最大成员初始化联合

    我正在尝试初始化一个LARGE INTEGER在 C 库中为 0 确切地说是 C 03 以前 初始化是 static LARGE INTEGER freq 0 在 MinGW 下它产生了一个警告 缺少成员 LARGE INTEGER Hig
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它

随机推荐

  • 源码看CoordinatorLayout.Behavior原理

    http blog csdn net qibin0506 article details 50377592 在上一篇博客CoordinatorLayout高级用法 自定义Behavior中 我们介绍了如何去自定义一个CoordinatorL
  • Java中变量的作用域详解

    作用域定义 字面解释 scope 域即一定范围内的较大的地方 顾名思义就是在一定的范围内起作用 大白话解释 父母在家的时候能控制你的玩与学习 出了家门说了也白说 老师在校的时候能够管理你的行为 出了学校你都想管管他 这就是说 不管什么样的指
  • 单表数据量达多少时才建议分库分表

    1 阿里巴巴开发手册建议是 推荐 单表行数超过500万行或者单表容量超过2GB 才推荐进行分库分表 说明 如果预计三年后的数据量根本达不到这个级别 请不要在创建表时就分库分表 2 实际情况还要根据机器的配置视情况而定 3 阿里巴巴开发手册下
  • oracle生成UUID

    oracle生成UUID uuid Universally Unique Identifier 全局唯一标识符 是指在一台机器上生成的数字 它保证对在同一时空中的所有机器都是唯一的 按照开放软件基金会 OSF 制定的标准计算 用到了以太网卡
  • leetcode题解:最长公共前缀

    leetcode题解 最长公共前缀 题目描述 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 示例 1 输入 flower flow flight 输出 fl 示例 2 输入 dog racecar car
  • [Docker]Elasticsearch启动报错:Format version is not supported

    如果之前安装过Elasticsearch 安装新的Elasticsearch之前需要清空宿主机器对应的挂载目录下的文件数据
  • 打百万拳,走万里路。

    自我介绍 CSDN的大家你们好啊 我是一名大一的学生 与CSDN的相识还要从大一一次次查找知识点开始 当时由于刚接触编程 做什么都一头雾水而又不想去问老师那些简单的知识 于是自己在网上查找 就发现了CSDN这个大学生聚集地 由于很多都是和我
  • Python单重循环练习题

    第一次学python 求大佬指正 1 有1020个西瓜 第一天卖掉总数的一半后又多卖出两个 以后每天卖剩下的一半多两个 问几天以后能卖完 8天后能卖完 sum 1020 day 0 while sum gt 0 day 1 sum sum
  • 解决tomcat 启动超过45秒时间限制

    当在eclipse运行一个javaweb项目时 出现了如下图片中的问题 解决方法 1在如下页面中找到Servers 找不到的话可以通过Window gt gt Show View放到下方 2 双击Servers进到如下页面 3 打开箭头所指
  • C++: read SQL server data using System::Data::SqlClient;

    stdafx h stdafx h include file for standard system include files or project specific include files that are used frequen
  • 『学Vue2+Vue3』自定义指令、插槽、路由入门

    day05 一 学习目标 1 自定义指令 基本语法 全局 局部注册 指令的值 v loading的指令封装 2 插槽 默认插槽 具名插槽 作用域插槽 3 综合案例 商品列表 MyTag组件封装 MyTable组件封装 4 路由入门 单页应用
  • 20个最炫HTML5,jQuery和CSS3下拉菜单制作教程(附示例/源码)

    3 Level Navigation Menu 三级导航菜单 独具特色的导航菜单 包含CSS3渐变 多个子菜单和jQuery动画 CSS3 Minimalistic Navigation Menu 一个简单的CSS3动画导航菜单 SLIDE
  • python之logging模块详解

    python之 logging 模块 文章目录 python之 logging 模块 一 日志关概念 日志的作用 日志的等级 3 日志字段信息与日志格式 4 日志功能的实现 二 logging 模块介绍 什么是logging模块 loggi
  • Linux服务器启动tomcat的三种方式

    直接进入主题 首先cd进入tomcat的bin文件夹下 然后可以尝试以下三种启动方式 第一种 当前会话启动 startup sh 效果 然后tomcat就在后台启动了 我们还可以在当前会话中继续输入其它指令 比如 ps ef grep to
  • Source Insight 自动补全 C 关键字、keil 标准库关键字

    一开始遇到该问题疯狂 baidu bing 相关的 blog 寥寥无几 而且是差不多十年前的 blog 主要原因 Source Insight 默认不包含 C 库文件 keil 标准库 导致编辑代码时找不到 C 库的相关宏 变量类型 函数等
  • [1082]IDEA配置tomcat时出现的问题及解决(HTTP状态404-未找到)

    文章目录 问题1 没有新建环境变量 问题2 tomcat设置depolyment有误 问题1 没有新建环境变量 解决 在系统环境变量中添加变量CATALINA BASE和CATALINA BASE 两个变量的值都是tomcat的安装路径 如
  • 【Java SE】基本数据类型

    大家好 我是保护小周 本期为大家带来的是 Java的基本数据类型 内容会与C语言的基本数据类型进行基本的比较 数据类型提示 整型提升 以及简单了解 String 类型 进一步感受Java 的安全性 C语言混不下去了 面向对象的编程太爽了 目
  • Hyperledger Fabric 安装环境配置答疑(1)

    目录 1 Hyperledger Fabric只支持Ubuntu系统吗 2 cURL是什么 有什么作用 3 为什么要安装Docker及docker compose 4 能否不使用Golang而换作其他语言环境 5 一定要安装Node与npm
  • 多态的概念

    一 多态的概念 多态 Polymorphism 按字面的意思就是 多种状态 是面向对象的序设计语言最核心的特征 具体点就是去完成某个行为 当不同的对象去完成时会产生出不同的状态 多态建立在继承和封装的基础上 二 多态的分类 编译时多态 设计
  • 静态成员变量的初始化,以及可能引发的multiple define问题

    静态成员变量的初始化 以及可能引发的multiple define问题 先说个人问题的解决方式 不要再头文件中定义静态成员变量 示例 test h ifndef TEST H define TEST H class hh static in