如何在类中使用结构的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);
该如何解决?我应该怎么做这样的事情?
答案 0 :(得分:3)
对于第一个错误,您无法使用要使用的构造函数语法初始化类声明中的类成员。
使用花括号代替括号:
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_char
是a_struct
的成员,而不是std::unique_ptr
,因此您需要使用my_ptr->a_char
而不是my_ptr.a_char
来访问它。
this->my_ptr->a_char = 'A';
...
printf("%c\n", this->my_ptr->a_char);