如何将 const struct 指针传递给 C++ 中的 setter 方法
How to pass const struct pointer to a setter method in C++
我正在尝试将 const 结构指针传递给自动生成的 C++ API 代码的 setter setContainer
,因此我无法更改 class :
#include <iostream>
#include <memory>
class Class // Class definition
{
public:
struct Container // Container definition
{
double value = 0.0;
};
Class() { } // constructor
~Class() { } // destructor
void setContainer(const Container * pContainer)
{
mContainer = *pContainer; // setter
}
const Class::Container & getContainer() const
{
return mContainer; // getter
}
private:
Container mContainer;
};
如您所见,我不知道如何以正确的方式将结构对象传递给 setContainer
方法。智能指针会更好,因为我使用的是 C++14。
int main()
{
Class objClass;
const auto container1 = objClass.getContainer();
// Output: container1.value: 0.0
std::cout << "container1.value: " << container1.value << std::endl;
// Need to set this at runtime
Class::Container container2;
container2.value = 5.0;
// Output: container2.value: 5.0
std::cout << "container2.value: " << container2.value << std::endl;
// ERROR: no matching function for call to ‘Class::setContainer(Class::Container&)’
objClass.setContainer(container2);
const auto container3 = objClass.getContainer();
// Desired Output: container3.value: 5.0 (set by setContainer)
std::cout << "container3.value: " << container3.value << std::endl;
return 0;
}
我非常感谢能帮助我解决这个问题。
你的 setter 函数需要一个指向 Container
对象的指针,所以给它一个:只需将 &
operator 添加到你的参数中:
objClass.setContainer(&container2);
您可以使用智能指针和 get() 函数来提取原始指针,如下所示
std::shared_ptr<Class::Container>m_container2 = std::make_shared<Class::Container>(container2);
objClass.setContainer(m_container2.get());
或者您可以使用 & 运算符来获取指针。
我正在尝试将 const 结构指针传递给自动生成的 C++ API 代码的 setter setContainer
,因此我无法更改 class :
#include <iostream>
#include <memory>
class Class // Class definition
{
public:
struct Container // Container definition
{
double value = 0.0;
};
Class() { } // constructor
~Class() { } // destructor
void setContainer(const Container * pContainer)
{
mContainer = *pContainer; // setter
}
const Class::Container & getContainer() const
{
return mContainer; // getter
}
private:
Container mContainer;
};
如您所见,我不知道如何以正确的方式将结构对象传递给 setContainer
方法。智能指针会更好,因为我使用的是 C++14。
int main()
{
Class objClass;
const auto container1 = objClass.getContainer();
// Output: container1.value: 0.0
std::cout << "container1.value: " << container1.value << std::endl;
// Need to set this at runtime
Class::Container container2;
container2.value = 5.0;
// Output: container2.value: 5.0
std::cout << "container2.value: " << container2.value << std::endl;
// ERROR: no matching function for call to ‘Class::setContainer(Class::Container&)’
objClass.setContainer(container2);
const auto container3 = objClass.getContainer();
// Desired Output: container3.value: 5.0 (set by setContainer)
std::cout << "container3.value: " << container3.value << std::endl;
return 0;
}
我非常感谢能帮助我解决这个问题。
你的 setter 函数需要一个指向 Container
对象的指针,所以给它一个:只需将 &
operator 添加到你的参数中:
objClass.setContainer(&container2);
您可以使用智能指针和 get() 函数来提取原始指针,如下所示
std::shared_ptr<Class::Container>m_container2 = std::make_shared<Class::Container>(container2);
objClass.setContainer(m_container2.get());
或者您可以使用 & 运算符来获取指针。