C++中静态成员数据初始化问题
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++中静态成员数据初始化问题相关推荐
- vue中使data中的数据初始化
组件中的根元素使用了v-if,但是组件中的data数据不会初始化,因为不是组件使用了v-if,组件不会销毁:但是可是使用以下方式来让data数据初始化: Object.assign(this.$dat ...
- 静态成员数据 静态对象初始化 .
1.静态成员数据的定义,与静态类型的变量的定义方式一样,要在成员数据的定义之前加关键字static. 2.静态成员数据必须有确定的值,但由于在类的定义中不能对成员数据直接进行初始化,故必须在类定义的外 ...
- 速达软件/管家婆软件/用友软件/金蝶软件/餐饮软件/财务软件数据库修复/数据初始化恢复
数据恢复故障描述] 公司财务人员进行数据维护时,误操作,在财务软件中把数据初始化了,因最近没有做备份,故造成很多财务凭证丢失. 因为财务数据关系重大,所以客户急于找回. [数据恢复分析] 工程师检测, ...
- 建立student类,在此类中所有数据定义为私有数据变量。并建立一个student对象数组,用附件中的数据进行初始化。计算每个学生三门课程的总分和平均成绩(C++实验)
一.实验目的: (1)掌握类的创建,成员数据和成员函数的构建. (2)掌握构造函数的重载. (3)掌握静态成员函数和静态成员函数的使用. 二.实验内容和要求: (1)按照附件"成绩表.txt ...
- 【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket )
文章目录 I . FFMPEG 获取 AVPacket 数据前置操作 II . FFMPEG 获取 AVPacket 数据流程 III . FFMPEG AVPacket 结构体 IV . AVPac ...
- 在Spring Boot中加载初始化数据
文章目录 依赖条件 data.sql文件 schema.sql 文件 @sql注解 @SqlConfig 注解 在Spring Boot中加载初始化数据 在Spring Boot中,Spring Bo ...
- 【pytorch 】nn.init 中实现的初始化函数 normal, Xavier==》为了保证数据的分布(均值方差一致)是一样的,类似BN
为什么要输入和输出的方差相同?有利于信息的传递 为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等.在考虑线性激活函数的情况下, 在初始化的时候使各层神经元的方差保持不变, 即使各层有着相同的 ...
- python vector 初始化_一文带你走进Python中的数据类
全文共2607字,预计学习时长14分钟 图源:unsplash 数据类适用于Python3.7或更高版本,它不仅可以用作数据容器,还可以编写样板代码,简化创建类的过程. 创建第一个数据类 创建一个数据 ...
- 【转载】CodeWarrior IDE使用tips之prm链接文件详解(自定义存储器分区以及自定义RAM数据初始化与在RAM中运行函数)...
CodeWarrior IDE使用tips之prm链接文件详解(自定义存储器分区以及自定义RAM数据初始化与在RAM中运行函数) 2017-08-19 胡恩伟 汽车电子expert成长之路 内容提要 ...
最新文章
- Spring Boot项目错误:Error parsing lifecycle processing instructions
- java int interger_java面试题之int和Integer的区别
- 12 Useful Tips for Machine Learning (转载)
- Java 小故事系列 导航
- python plot 坐标轴范围_Python-Matplotlib 15 坐标轴范围
- matlab利用t-SNE实现高维数据可视化(tsne函数用法实例)
- java pdf打印_Java 打印PDF文档
- [转载] Java 语言中的实例初始化块 ( IIB) 详解
- Python3网络爬虫开发实战,Appium+mitmdump 爬取京东商品
- python读取doc文件 语义识别_我可以让socket.makefile具有与常规文件相同的读取语义吗?...
- RabbitMQ学习之Publish/Subscribe(3)
- 单片机原理及接口技术
- Stata做KHB中介效应分析
- 微信公众号开发:实人认证,活体人脸识别解决方案
- 廖雪峰python教程之python基础
- php查询更新数据库数据类型,更新Update
- IEEE802.11规定了多种WLAN通信标准,其中(61)与其他标准采用的频段不同,因而不能兼容。【答案】A
- 三星n9008 android 6.0,三星note3_三星n9008s_三星n9008s更新6.0
- Kotlin-JetPack-MVVM 从零开始搭建App
- 软链接(Soft Link,符号链接)和硬链接(Hard Link)。