怎样做简易局域网站点,制作网站最新工具,下面哪些属于免费的网络营销方式,石家庄住房和城乡建设局官网C中静态成员数据初始化问题
1、静态成员变量#xff1a;定义为静态成员意味着它能被所有的实例化对象所共有#xff0c;其修改值为该类的其它所有实例所见。
下面看一个例子
class people
{
public:people(int i):id(i){num;}
private:static int num;int id;
}; num为静…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 age18;static int num;static string name;
};
int people::num0;
string people::name;
string people::name(alex);1、C规定如果是const限定的成员变量可以直接在类内初始化
2、非const限定要在类外初始化。初始方法是类型 作用域变量名值
3、静态对象做成员变量初始化只需要再定义一次就行了这样会调用类的无参构造如果需要传递值则加括号。 3、两种处理方式C11编译器报错
第一种代码如下
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.atfloat(0,0);fy K.atfloat(1,1);cx K.atfloat(0,2);cy K.atfloat(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 的最后对类的静态成员进行初始化