有关QT中声明一个vector为全局变量的初始化问题
2017-11-20 11:30
2096 查看
前面说了一个简单的int类型全局变量,是怎么实现的,但是对于更复杂一点的vector类型,上面的方法固然可以借鉴,但是初始化的问题应该是不一样的。
全局变量:在头文件的类中声明,在cpp文件的函数体外面进行初始化。基本的套路就是这样的
类的静态变量必须在类外初始化,这个懂吧!
来个具体点儿的
STLView.h
class STLView
{
public:
STLView(); //声明构造函数
bool readSTL(const QString &fname); //读取STL数据
QVector<MyTriangle> triangleVector; //三角面的集合
static int splitString(const QString &str, char split, QVector<QString>& strArray); //是一个静态成员函数
double triangleZMax,triangleZMin; //定义所有三角面片的z坐标最大值和最小值
static bool comp(const MyTriangle &a, const MyTriangle &b);
//排序函数,按照MyTriangle.zmin的值排序;QVector序数越大,zmin越大;升序排列,,这里必须写成静态成员函数
//如果存在三角形a和b的zmin相同,那么看a和b在STL文件中的顺序,排在前面的话,最终在QVector里面排后面
// double read();
// MyPoint lineDir,testPoint; //定义两点直线的方向,测试点
QVector<CrossPoint> CrossPointVector; //交点容器
static QVector<QPointF> vector; //设置轮廓二维点信息,定义一个向量存储QPoint类型的点
static QPointF point;
static int a; //定义全局变量
double ZLevel; //定义z平面的值
double Dist(MyPoint P1, MyPoint P2); //计算两点距离
bool Between(MyPoint P1, MyPoint P2, MyPoint P3); //判断point3是否在point1和point2之间
};
STLView.cpp
#include "STLView.h"
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QtAlgorithms>//数据排序
#include <QList>
int STLView::a = 11111; //int类型初始化
QPointF STLView::point = QPointF(1,1); //vector类型初始化
QVector<QPointF> STLView::vector = QVector<QPointF>();
STLView::STLView() //默认构造函数,带有数组的声明必须有默认构造函数
{
}
有一个问题不得不重视:
就是在给QPointF类型的vector赋初值的时候,一般的vector赋值都是用append,push_back ,但是这两个函数呢,它们必须在函数内部使用;然而我们要在函数
外部给全局变量vector赋值,显然append,push_back是不管用的,所以我们调用了vector的构造函数,之后再在类的构造函数插入或者赋值。
最后,谢谢大连(27754587)威哥
全局变量:在头文件的类中声明,在cpp文件的函数体外面进行初始化。基本的套路就是这样的
类的静态变量必须在类外初始化,这个懂吧!
来个具体点儿的
STLView.h
class STLView
{
public:
STLView(); //声明构造函数
bool readSTL(const QString &fname); //读取STL数据
QVector<MyTriangle> triangleVector; //三角面的集合
static int splitString(const QString &str, char split, QVector<QString>& strArray); //是一个静态成员函数
double triangleZMax,triangleZMin; //定义所有三角面片的z坐标最大值和最小值
static bool comp(const MyTriangle &a, const MyTriangle &b);
//排序函数,按照MyTriangle.zmin的值排序;QVector序数越大,zmin越大;升序排列,,这里必须写成静态成员函数
//如果存在三角形a和b的zmin相同,那么看a和b在STL文件中的顺序,排在前面的话,最终在QVector里面排后面
// double read();
// MyPoint lineDir,testPoint; //定义两点直线的方向,测试点
QVector<CrossPoint> CrossPointVector; //交点容器
static QVector<QPointF> vector; //设置轮廓二维点信息,定义一个向量存储QPoint类型的点
static QPointF point;
static int a; //定义全局变量
double ZLevel; //定义z平面的值
double Dist(MyPoint P1, MyPoint P2); //计算两点距离
bool Between(MyPoint P1, MyPoint P2, MyPoint P3); //判断point3是否在point1和point2之间
};
STLView.cpp
#include "STLView.h"
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QtAlgorithms>//数据排序
#include <QList>
int STLView::a = 11111; //int类型初始化
QPointF STLView::point = QPointF(1,1); //vector类型初始化
QVector<QPointF> STLView::vector = QVector<QPointF>();
STLView::STLView() //默认构造函数,带有数组的声明必须有默认构造函数
{
}
有一个问题不得不重视:
就是在给QPointF类型的vector赋初值的时候,一般的vector赋值都是用append,push_back ,但是这两个函数呢,它们必须在函数内部使用;然而我们要在函数
外部给全局变量vector赋值,显然append,push_back是不管用的,所以我们调用了vector的构造函数,之后再在类的构造函数插入或者赋值。
最后,谢谢大连(27754587)威哥
相关文章推荐
- QT 全局变量(多文件使用一个变量) VECTOR(二维数组行、列未知)
- 一个可遇不可求的 bug 全局变量初始化顺序问题 哈哈
- C中全局变量和局部变量的初始化问题
- QT全局变量声明及使用
- 嵌入式C编程中的全局变量重复声明问题
- QT全局变量声明及使用
- c++中定义一个全局变量,子函数修改变量后,主函数没有改变问题
- 转载:关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题
- Web中用static全局变量的一个问题!
- C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误
- 请教一个声明变量的问题
- 关于对于c语言全局变量初始化问题
- 关于C未初始化全局变量的连接问题
- 用exten在一个文件内声明全局变量
- 分享一个jquery ajax 中不能修改全局变量问题的方法
- 定义一个以is开头的全局变量利用IDEA的Getter and Setter自动生成get跟set方法出现的问题
- 全局变量的声明的问题
- 关于如何初始化一个类内的静态二维数组变量问题
- Vector中作为全局变量时注意的问题(转)
- C++中有关各种变量声明和定义的问题