gpt4 book ai didi

c++ - 在 C++ 中初始化指向结构的指针

转载 作者:行者123 更新时间:2023-11-28 07:00:46 24 4
gpt4 key购买 nike

好的,所以,我正在尝试做类似“复合文字”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);

编辑:这是我的 Code on Github如果你想看看! ( Commit )

最佳答案

首先,C++ 中没有复合文字。

其次,在局部作用域中声明的复合文字会创建一个自动对象,一旦包含 block 结束,该对象就会自动销毁。你确定你需要一个指向这种短命对象的指针吗? (我并不是说这一定是错误的,但很可能是错误的。)

无论如何,在 C++ 中,您不允许创建指向临时对象的指针。 (至少不是你这样做的方式 - 使用内置的一元 & 运算符。)只需声明一个 named 对象并使你的指针指向该命名对象。忘记临时和复合文字。

GaussBlurParams GBP = { cv::Size(5,5), 3, 3, 0 };
GaussBlurParams *GBPs = &GBP;

再次确保该命名对象的生命周期与指针值的生命周期一样长,否则您将得到无效的悬挂指针。

关于c++ - 在 C++ 中初始化指向结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22522346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com