C++中静态成员数据初始化问题

1、静态成员变量:定义为静态成员意味着它能被所有的实例化对象所共有,其修改值为该类的其它所有实例所见。

下面看一个例子

class people
{
public:people(int i):id(i){num++;}
private:static int num;int id;
};

num为静态成员,每调用有参构造一次num就自加一次。

首先看people这个类的空间长度sizeof(people);     注意结果为4而不是8,因为num是每个实例化对象所共有的,不是单独一个对象的空间。

下面来看静态成员的初始化问题:

class people
{
protected:static const int age=18;static int num;static string name;
};
int people::num=0;
string people::name;
string people::name("alex");

1、C++规定如果是const限定的成员变量可以直接在类内初始化

2、非const限定要在类外初始化。初始方法是<类型>  <作用域>::变量名=值;

3、静态对象做成员变量,初始化只需要再定义一次就行了,这样会调用类的无参构造,如果需要传递值则加括号。

3、两种处理方式,C++11编译器报错

第一种代码如下:

Frame.h文件

class Frame{public:Frame();//Frame(const cv::Mat  &frame):mCurrentFrame(frame){};//main函数直接调用read来读取图像,传递给Frame类内部//Frame(const cv::Mat  &frame, const cv::Mat K);//main函数直接调用read来读取图像,传递给Frame类内部Frame(const cv::Mat K);void showFrame(cv::Mat keyFrame);cv::Mat ImageToGray();//彩色图像转换灰度图cv::Mat getCameraMatrix();cv::Mat getDistMatrix();//cv::Mat cropImg();//裁剪//ReadFile  *readFile;//ReadCalibParameter();//float fx;private://cv::Mat mCurrentFrame;static cv::Mat mK;    //std::string mCurrentFile;static float fx;static float fy;static float cx;static float cy;};

Frame.cpp文件

Frame::Frame(const cv::Mat K){//mCurrentFile = CurrentFile; //mCurrentFrame = frame;/*cv::FileStorage fsSetting(camerParamterPath.c_str(), cv::FileStorage::READ);if (!fsSetting.isOpened()){std::cerr << "ERROR: Failed to open file ReadAlgorithmParameter file! Please check Wrong path to settings " << mFilePath << std::endl;return -1;}fx = fsSetting["fx"] ;fy = fsSetting["cx"] ;cx = fsSetting["fy"] ;cy = fsSetting["cy"] ;*/fx = K.at<float>(0,0);fy = K.at<float>(1,1);cx = K.at<float>(0,2);cy = K.at<float>(1,2);}

编译器报错信息:意思是静态成员是未定义的引用;根本原因就是没有在类外对静态成员进行初始化

修正:

class Frame{public:Frame();//Frame(const cv::Mat  &frame):mCurrentFrame(frame){};//main函数直接调用read来读取图像,传递给Frame类内部//Frame(const cv::Mat  &frame, const cv::Mat K);//main函数直接调用read来读取图像,传递给Frame类内部Frame(const cv::Mat K);void showFrame(cv::Mat keyFrame);cv::Mat ImageToGray();//彩色图像转换灰度图cv::Mat getCameraMatrix();cv::Mat getDistMatrix();//cv::Mat cropImg();//裁剪//ReadFile  *readFile;//ReadCalibParameter();//float fx;private://cv::Mat mCurrentFrame;static cv::Mat mK;    //std::string mCurrentFile;static float fx;static float fy;static float cx;static float cy;};float Frame::fx = 0;float Frame::fy = 0;float Frame::cx = 0;float Frame::cy = 0;

在Fram.cpp 的最后,对类的静态成员进行初始化

C++中静态成员数据初始化问题相关推荐

  1. vue中使data中的数据初始化

    组件中的根元素使用了v-if,但是组件中的data数据不会初始化,因为不是组件使用了v-if,组件不会销毁:但是可是使用以下方式来让data数据初始化: Object.assign(this.$dat ...

  2. 静态成员数据 静态对象初始化 .

    1.静态成员数据的定义,与静态类型的变量的定义方式一样,要在成员数据的定义之前加关键字static. 2.静态成员数据必须有确定的值,但由于在类的定义中不能对成员数据直接进行初始化,故必须在类定义的外 ...

  3. 速达软件/管家婆软件/用友软件/金蝶软件/餐饮软件/财务软件数据库修复/数据初始化恢复

    数据恢复故障描述] 公司财务人员进行数据维护时,误操作,在财务软件中把数据初始化了,因最近没有做备份,故造成很多财务凭证丢失. 因为财务数据关系重大,所以客户急于找回. [数据恢复分析] 工程师检测, ...

  4. 建立student类,在此类中所有数据定义为私有数据变量。并建立一个student对象数组,用附件中的数据进行初始化。计算每个学生三门课程的总分和平均成绩(C++实验)

    一.实验目的: (1)掌握类的创建,成员数据和成员函数的构建. (2)掌握构造函数的重载. (3)掌握静态成员函数和静态成员函数的使用. 二.实验内容和要求: (1)按照附件"成绩表.txt ...

  5. 【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket )

    文章目录 I . FFMPEG 获取 AVPacket 数据前置操作 II . FFMPEG 获取 AVPacket 数据流程 III . FFMPEG AVPacket 结构体 IV . AVPac ...

  6. 在Spring Boot中加载初始化数据

    文章目录 依赖条件 data.sql文件 schema.sql 文件 @sql注解 @SqlConfig 注解 在Spring Boot中加载初始化数据 在Spring Boot中,Spring Bo ...

  7. 【pytorch 】nn.init 中实现的初始化函数 normal, Xavier==》为了保证数据的分布(均值方差一致)是一样的,类似BN

    为什么要输入和输出的方差相同?有利于信息的传递 为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等.在考虑线性激活函数的情况下, 在初始化的时候使各层神经元的方差保持不变, 即使各层有着相同的 ...

  8. python vector 初始化_一文带你走进Python中的数据类

    全文共2607字,预计学习时长14分钟 图源:unsplash 数据类适用于Python3.7或更高版本,它不仅可以用作数据容器,还可以编写样板代码,简化创建类的过程. 创建第一个数据类 创建一个数据 ...

  9. 【转载】CodeWarrior IDE使用tips之prm链接文件详解(自定义存储器分区以及自定义RAM数据初始化与在RAM中运行函数)...

    CodeWarrior IDE使用tips之prm链接文件详解(自定义存储器分区以及自定义RAM数据初始化与在RAM中运行函数) 2017-08-19 胡恩伟 汽车电子expert成长之路 内容提要 ...

最新文章

  1. Spring Boot项目错误:Error parsing lifecycle processing instructions
  2. java int interger_java面试题之int和Integer的区别
  3. 12 Useful Tips for Machine Learning (转载)
  4. Java 小故事系列 导航
  5. python plot 坐标轴范围_Python-Matplotlib 15 坐标轴范围
  6. matlab利用t-SNE实现高维数据可视化(tsne函数用法实例)
  7. java pdf打印_Java 打印PDF文档
  8. [转载] Java 语言中的实例初始化块 ( IIB) 详解
  9. Python3网络爬虫开发实战,Appium+mitmdump 爬取京东商品
  10. python读取doc文件 语义识别_我可以让socket.makefile具有与常规文件相同的读取语义吗?...
  11. RabbitMQ学习之Publish/Subscribe(3)
  12. 单片机原理及接口技术
  13. Stata做KHB中介效应分析
  14. 微信公众号开发:实人认证,活体人脸识别解决方案
  15. 廖雪峰python教程之python基础
  16. php查询更新数据库数据类型,更新Update
  17. IEEE802.11规定了多种WLAN通信标准,其中(61)与其他标准采用的频段不同,因而不能兼容。【答案】A
  18. 三星n9008 android 6.0,三星note3_三星n9008s_三星n9008s更新6.0
  19. Kotlin-JetPack-MVVM 从零开始搭建App
  20. 软链接(Soft Link,符号链接)和硬链接(Hard Link)。

热门文章

  1. kylinH5框架之项目组件理解
  2. 软件开发文档整理(之)一张示意图 | 清晰明了
  3. 8.8 正睿暑期集训营 Day5
  4. 第二周CoreIDRAW课总结
  5. python接口自动化测试(二)-requests.get()
  6. C#获取程序集的版本号和最后编译时间
  7. 14.cookie与自动登陆
  8. 关于活动对像要注意的问题
  9. Tekson的数据结构程序9——搜索
  10. Node --- Basic认证