Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用模板C和x2B创建“共享”ptr时出现问题+;_C++_Templates_Shared Ptr_Smart Pointers - Fatal编程技术网

C++ 使用模板C和x2B创建“共享”ptr时出现问题+;

C++ 使用模板C和x2B创建“共享”ptr时出现问题+;,c++,templates,shared-ptr,smart-pointers,C++,Templates,Shared Ptr,Smart Pointers,我试图在我的函数解析器库中使用make_shared,但出现了一个错误 error: too many arguments to function ‘std::shared_ptr<_Tp1> std::make_shared(_Args&& ...) [with _Tp = parser::Parser, parser::state::empty>; _Args = {}]’ 这就是导致错误的代码 using State = parser::state::S

我试图在我的函数解析器库中使用
make_shared
,但出现了一个错误

error: too many arguments to function ‘std::shared_ptr<_Tp1> std::make_shared(_Args&& ...) [with _Tp = parser::Parser, parser::state::empty>; _Args = {}]’
这就是导致错误的代码

using State = parser::state::State<>;
int main()
{
    std::cout<<"Hello World";
    parser::Parser<char> p1("test1", [](State &s) -> char { return 'k'; });
    std::shared_ptr<parser::Parser<char>> p2 = std::make_shared<parser::Parser<char>>("test2", [](State &s) -> char { return 'o'; });
    State s;
    std::cout << p1.seq<char, std::string>(p2, [](char a, char b) { return std::string(1,a) + std::string(1,b); })->parse(s);
    return 0;
}
使用State=parser::State::State;
int main()
{
std::cout char{return'o';});
s国;
std::cout解析;
返回0;
}

请使用一些在线编译器提供:或至少粘贴更多错误日志,以便我们知道哪一行有问题。
{&this->metadata,&second->metadata}
std::make_shared
中是不可推断的<代码>标准::向量{&this->metadata,&second->metadata}应该可以解决这个问题。您还有一个常量问题。元数据被声明为常量,而初始化向量期望它们为非常量非常量和构造函数的
std::vector{&this->metadata,&second->metadata}
。向量不要求元数据为常量,相反。元数据是常量,因此不能将非常量指针指定给指向常量变量的指针。将
std::vector
更改为
std::vector
,同时保留
常量ParserMetaData元数据。。。
using State = parser::state::State<>;
int main()
{
    std::cout<<"Hello World";
    parser::Parser<char> p1("test1", [](State &s) -> char { return 'k'; });
    std::shared_ptr<parser::Parser<char>> p2 = std::make_shared<parser::Parser<char>>("test2", [](State &s) -> char { return 'o'; });
    State s;
    std::cout << p1.seq<char, std::string>(p2, [](char a, char b) { return std::string(1,a) + std::string(1,b); })->parse(s);
    return 0;
}