如何摆脱不兼容的 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 Studio19\Community\VC\Tools\MSVC.29.30037\include\xutility 158
我不知道是什么,所以我将代码放在这里以举例说明所做的事情:
TotalTest.cpp
include <iostream>
#include "Test.h"
using namespace mytest;
int main()
{
std::cout << "Hello World!\n";
new Test();
}
Test.h
#pragma once
#include "Test.h"
#include <iostream>
namespace mytest
{
using namespace std;
class Test
{
public:
Test();
~Test();
shared_ptr<Test> t;
};
}
Test.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);
};
}
TestFactory.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)
在 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()
的任何参数都会传递给模板参数中指定类型的构造函数。在这种情况下,不需要任何参数。
错误来自以下行:
return make_shared<Test>(new Test());
有两种初始化方式 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
的构造函数。
通常首选第二个选项。您可以在此处查看更多信息:Difference in make_shared and normal shared_ptr in C++
另外:
Test.h
不应包含自身(它在顶部有 #include "Test.h"
)。
您应该避免使用 using namespace std;
。更多信息在这里:Why is "using namespace std;" considered bad practice?
我在编译过程中遇到以下错误:
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 Studio19\Community\VC\Tools\MSVC.29.30037\include\xutility 158
我不知道是什么,所以我将代码放在这里以举例说明所做的事情:
TotalTest.cpp
include <iostream>
#include "Test.h"
using namespace mytest;
int main()
{
std::cout << "Hello World!\n";
new Test();
}
Test.h
#pragma once
#include "Test.h"
#include <iostream>
namespace mytest
{
using namespace std;
class Test
{
public:
Test();
~Test();
shared_ptr<Test> t;
};
}
Test.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);
};
}
TestFactory.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)
在 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()
的任何参数都会传递给模板参数中指定类型的构造函数。在这种情况下,不需要任何参数。
错误来自以下行:
return make_shared<Test>(new Test());
有两种初始化方式 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
的构造函数。
通常首选第二个选项。您可以在此处查看更多信息:Difference in make_shared and normal shared_ptr in C++
另外:
Test.h
不应包含自身(它在顶部有#include "Test.h"
)。您应该避免使用
using namespace std;
。更多信息在这里:Why is "using namespace std;" considered bad practice?