我正在学习智能指针以及在尝试编译以下内容时#34;愚蠢"代码我收到错误。
#include <memory>
#include <iostream>
class Test
{
std::string myString="dumm";
};
int main()
{
std::unique_ptr<Test> test(new Test());
std::cout<<test->myString<<std::endl;
return 0;
}
我只想知道,这是否有效,但我得到:&#34;申请 - &gt;到std :: unique_ptr而不是指针&#34;,这看起来很奇怪。
我正在使用c ++ 11
Eit:错误现已修复,我可以编译上面的代码。然而,CLion仍然给我&#34;不适用 - &gt;到std :: uniq_ptr&#34; -stuff,这似乎是IDE的错误
答案 0 :(得分:4)
在class中,默认可见性为private,这使myString
字段对test
对象不可见。设为public
:
#include <iostream>
#include <memory>
#include <string>
class Test {
public:
std::string myString = "dumm";
};
int main() {
std::unique_ptr<Test> test(new Test());
std::cout << test->myString;
}
如果编译C ++ 14及更高版本,则首选std::make_unique直接使用new
:
std::unique_ptr<Test> test = std::make_unique<Test>();
此功能在您正在使用的C ++ 11标准中不可用。