提问人:felipe 提问时间:4/12/2022 更新时间:4/12/2022 访问量:59
如何摆脱不兼容的 c++ 转换
How to get rid of incompatible c++ conversion
问:
我在编译过程中收到以下错误:
Severity Code Description Project File Line Suppression State
Error C2664 'mytest::Test::Test(const mytest::Test &)': cannot convert argument 1 from '_Ty' to 'const mytest::Test &' TotalTest C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30037\include\xutility 158
我不知道是什么,所以我把代码放在这里来举例说明正在做的事情:
总测试 .cpp
include <iostream>
#include "Test.h"
using namespace mytest;
int main()
{
std::cout << "Hello World!\n";
new Test();
}
测试.h
#pragma once
#include "Test.h"
#include <iostream>
namespace mytest
{
using namespace std;
class Test
{
public:
Test();
~Test();
shared_ptr<Test> t;
};
}
测试 .cpp
#include "Test.h"
namespace mytest
{
Test::Test()
{
}
Test::~Test()
{
}
}
TestFactory.h
#pragma once
#include "Test.h"
#include <iostream>
namespace mytest
{
using namespace std;
class TestFactory
{
public:
TestFactory();
shared_ptr<Test> CreateTest(int testClass);
};
}
测试工厂:.cpp
#include "TestFactory.h"
namespace mytest
{
TestFactory::TestFactory()
{
}
shared_ptr<Test> TestFactory::CreateTest(int testClass)
{
return make_shared<Test>(new Test());
}
}
我正在使用 Visual Studio C++ 语言标准:ISO C++14 标准 (/std:c++14)
答:
3赞
Remy Lebeau
4/12/2022
#1
在 中,是错误的,因为没有接受指针作为输入的构造函数。TestFactory::CreateTest()
make_shared<Test>(new Test())
Test
Test*
您需要改用,让调用默认构造函数:make_shared<Test>()
make_shared()
Test()
shared_ptr<Test> TestFactory::CreateTest(int testClass)
{
return make_shared<Test>();
}
传递到的任何参数都将传递给模板参数中指定的类型的构造函数。在这种情况下,不需要任何参数。make_shared()
1赞
wohlstad
4/12/2022
#2
错误来自以下行:
return make_shared<Test>(new Test());
有 2 种方法可以初始化:std::shared_ptr
直接使用构造函数,这需要你传递一个已经在堆上分配的对象,例如:
std::shared_ptr
Test
std::shared_ptr<Test> p{ new Test() };
使用 ,它在内部执行堆分配,例如:
make_shared()
std::shared_ptr<Test> p{ std::make_shared<Test>() };
在括号中,您可以将参数传递给 的构造函数。
Test
第二种选择通常是首选。您可以在此处查看更多信息:make_shared和正常shared_ptr C++的差异
另外:
Test.h
不应包括自身(它位于顶部)。#include "Test.h"
应避免使用 .更多信息在这里:为什么“使用命名空间 std;”被认为是不良做法?
using namespace std;
评论
new test()
new Test()
main()