C++:构造函数中的向量赋值错误
C++ : Vector assignment in constructor error
在我的程序中,我有以下类:
#ifndef CORNERS_H
#define CORNERS_H
#include <vector>
class Corners{
public:
Corners();
Corners( std::vector<unsigned short int>,std::vector<unsigned short int> );
Corners( std::vector<unsigned short int>,std::vector<unsigned short int>,
std::vector<unsigned short int>, std::vector<unsigned short int> );
void set2Corners( std::vector<unsigned short int>,std::vector<unsigned short int> );
void set4Corners( std::vector<unsigned short int>,std::vector<unsigned short int>,
std::vector<unsigned short int>, std::vector<unsigned short int> );
std::vector<unsigned short int> getA();
std::vector<unsigned short int> getB();
std::vector<unsigned short int> getC();
std::vector<unsigned short int> getD();
private:
std::vector<unsigned short int> colA;
std::vector<unsigned short int> colB;
std::vector<unsigned short int> colC;
std::vector<unsigned short int> colD;
};
#endif // CORNERS_H
此类的默认构造函数如下所示:
Corners::Corners(){
colA[RED] = 5;
colA[GREEN] = 5;
colA[BLUE] = 5;
colB[RED] = 31;
colB[GREEN] = 63;
colB[BLUE] = 31;
colC=colA;
colD=colB;
}
红绿蓝是在另一个文件中定义的枚举。对于我的整个程序,我在构建时没有收到任何错误。当我想在我的主实例中制作类时,例如:
Corners start;
当我运行该程序时,它冻结并退出并显示错误"分段错误"。我不知道为什么会这样,有人知道吗?
向
量的长度为 0,因此无法分配给位置。您首先必须初始化它们的长度。
Corners::Corners()
: colA(3)
, colB(3)
, colC(3)
, colD(3)
{
colA[RED] = 5;
colA[GREEN] = 5;
colA[BLUE] = 5;
colB[RED] = 31;
colB[GREEN] = 63;
colB[BLUE] = 31;
colC=colA;
colD=colB;
}
甚至像Mooing Duck建议的那样。
Corners::Corners()
: colA{5, 5, 5}
, colB{31, 63, 31}
, colC(colA)
, colD(colB)
{}
.. 可以内联,就像他展示的那样。
但也许你应该切换到std::array<unsigned short int, 3>
.使用using CustomArray=std::array<unsigned short int, 3>;
这样你就不必每次都写那么长的定义。
编辑:正如User4581301所建议的那样,更好的是:
struct Color {
unsigned short int Red;
unsigned short int Green;
unsigned short int Blue;
};
您的向量没有容量。使用下标运算符时,矢量不会自动调整大小。您可以在 colA 和 colB 上调用 resize(( 方法,并在设置值之前传入大于 {RED,GREEN,BLUE} 最大值的 resize(( 方法。例如,如果 BLUE 是枚举中最大的:
Corners::Corners() {
colA.resize(BLUE + 1);
colB.resize(BLUE + 1);
colA[RED] = 5;
colA[GREEN] = 5;
colA[BLUE] = 5;
colB[RED] = 31;
colB[GREEN] = 63;
colB[BLUE] = 31;
colC=colA;
colD=colB;
}
相关文章:
- 是否可以使用宏来访问动态数组或向量中的元素或为其赋值
- C++:向量元素赋值导致访问冲突
- 如何从文件中为C++中的向量赋值?
- 为多维向量赋值
- C++:构造函数中的向量赋值错误
- C++标准是否对向量赋值函数或构造函数提出了明确的要求
- 两个向量赋值错误
- std::向量赋值信号 11 和信号 6
- 从两个指针对向量赋值进行段错误
- 优化向量赋值 c++
- Opencv-Mat向量赋值给一行矩阵,最快的方式
- 在C++中为向量赋值对
- 如何为结构中的向量赋值或打印值
- 向量赋值崩溃
- 向量赋值会使"保留"无效吗
- 向量赋值/插入和转换要赋值/插入的值
- cpp中的向量到非向量赋值
- 向量赋值操作符和复制构造函数
- 函数后向量赋值的性能
- 具有不同const正确性的向量赋值操作符