在c++中初始化指向struct的指针
Initializate a pointer to struct in C++
好的,所以,我试图做一些像"复合文字"AFAIK,我记得在为嵌入式设备编程时在C上这样做,但我想转移到c++。我知道c++不是C,我认为它们是兼容的。
GaussBlurParams *GBPs= &(GaussBlurParams) {Size(5,5), (int)3, (int)3, (int)0};
但是编译器报错:taking address of temporary [-fpermissive]
错误。我想使用一个'new'构造函数,但它变得更糟。
这是我对GaussBlurParams的定义
typedef struct gaussBlurParams{
cv::Size ksize;
int stdX;
int stdY;
int borderType;
} GaussBlurParams;
我怎样才能克服这个问题?
致以最亲切的问候!
编辑:好的,这就是我正在做的:
void ProcessFrames(Mat In, Mat Out, GaussBlurParams GBPs){
GaussianBlur(In, Out, GBPs.ksize, GBPs.stdX, GBPs.stdY);
}
createTrackbar("Kernel Size Height", "Output Stream Viewer", &GBPs->ksize.height, 10, NULL);
createTrackbar("Kernel Size Width", "Output Stream Viewer", &GBPs->ksize.width, 10, NULL);
createTrackbar("STD X Sigma", "Output Stream Viewer", &GBPs->stdX, 10, NULL);
createTrackbar("STD Y Sigma", "Output Stream Viewer", &GBPs->stdX, 10, NULL);
ProcessFrames(*Frame, *OutputFrame, *GBPs);
编辑:这是我在Github上的代码,如果你想看一看!(提交) 首先,c++中没有复合文字。
其次,在局部范围内声明的复合文字创建了一个自动对象,一旦包含块结束,该对象将自动销毁。您确定需要一个指向如此短寿命对象的指针吗?(我不是说这一定是错的,但它很可能是错的。)
无论如何,在c++中不允许创建指向临时对象的指针。(至少不是您使用内置一元&
操作符的方式。)只需声明一个命名对象,并使指针指向该命名对象。忘掉临时词和复合字面值吧。
GaussBlurParams GBP = { cv::Size(5,5), 3, 3, 0 };
GaussBlurParams *GBPs = &GBP;
同样,请确保该命名对象的生命周期与指针值的生命周期一样长,否则将得到无效的悬空指针。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- "typedef"类型名称是否可以像"struct"定义那样声明指向结构的指针?
- sizeof(* struct 指针)是否给你结构的值
- 删除字符串指针在struct中的内存
- 如何使用struct构造函数在结构中初始化指针阵列
- 引用绑定到类型 'struct value_type' 的 null 指针
- 指向struct的指针,包含指向对象的指针,我想调用一个函数
- 如何从采用 int 和 struct 类型的指针的函数中取消引用指针返回的地址?
- 将指向struct的指针强制转换为数组
- 在struct[]中分配char*指针值(结构成员)的最优化方法
- 在类函数中返回Struct指针
- typedef struct 指针进入 JNA
- 将char复制到struct指针char
- 指针函数在类中返回Struct的值
- 初始化Struct指针
- 将指向struct的指针强制转换为数组指针是否有效?
- 自动更新struct中的指针值
- 初始化指向struct语法的指针
- 在c++中初始化指向struct的指针