gpt4 book ai didi

c++ - 如何在类中使用结构的 std::unique_ptr?

转载 作者:行者123 更新时间:2023-11-27 23:38:34 28 4
gpt4 key购买 nike

如何在类中使用结构的 std::unique_ptr?像这样的东西,例如:

#include <cstdio>
#include <memory>

int main(void)
{
struct a_struct
{
char a_char;
};

class A_class
{
public:
A_class()
{
this->my_ptr.a_char = 'A';
}
void A_class_function()
{
printf("%c\n",this->my_ptr.a_char);
}
~A_class()
{

}
private:
std::unique_ptr<a_struct> my_ptr(new a_struct);
};

A_class My_class;

My_class.A_class_function();

My_class.~A_class();

return(0);
}

编译时,它返回这个错误,我不知道该怎么做:

ptr_test.cpp: In function ‘int main()’:
ptr_test.cpp:27:39: error: expected identifier before ‘new’
std::unique_ptr<a_struct> my_ptr(new a_struct);
^~~
ptr_test.cpp:27:39: error: expected ‘,’ or ‘...’ before ‘new’
ptr_test.cpp: In constructor ‘main()::A_class::A_class()’:
ptr_test.cpp:16:14: error: invalid use of member function ‘std::unique_ptr<main()::a_struct> main()::A_class::my_ptr(int)’ (did you forget the ‘()’ ?)
this->my_ptr.a_char = 'A';
~~~~~~^~~~~~
ptr_test.cpp: In member function ‘void main()::A_class::A_class_function()’:
ptr_test.cpp:20:28: error: invalid use of member function ‘std::unique_ptr<main()::a_struct> main()::A_class::my_ptr(int)’ (did you forget the ‘()’ ?)
printf("%c\n",this->my_ptr.a_char);

我该如何解决这个问题?我该如何做这样的事情?

最佳答案

对于第一个错误,您无法使用您尝试使用的构造函数语法在类声明中初始化类成员。

使用大括号代替圆括号:

class A_class
{
...

private:
std::unique_ptr<a_struct> my_ptr{new a_struct};
};

或者,如果您有 C++14 编译器:

class A_class
{
...

private:
std::unique_ptr<a_struct> my_ptr = std::make_unique<a_struct>();
};

否则,请改用A_class 构造函数的成员初始化列表:

class A_class
{
public:
A_class() : my_ptr(new a_struct)
{
...
}

...

private:
std::unique_ptr<a_struct> my_ptr;
};

对于其他错误,a_chara_struct 的成员,而不是 std::unique_ptr,因此您需要使用 访问它code>my_ptr->a_char 而不是 my_ptr.a_char

this->my_ptr->a_char = 'A';
...
printf("%c\n", this->my_ptr->a_char);

关于c++ - 如何在类中使用结构的 std::unique_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57319827/

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