我目前有以下结构

struct LR0Item{
    string lhs;
    vector<string> rhs;
    int dpos;
};

struct Node{
    LR0Item* item;
    map<string, Node*> tr;
};

struct my_struct{
    bool operator()(
                    const LR0Item &a,
                    const LR0Item &b) {
                        if(a.lhs != b.lhs)
                            return a.lhs<b.lhs;
                        if(a.dpos != b.dpos)
                            return a.dpos<b.dpos;
                        return a.rhs<b.rhs;
                    }
};

和以下代码:
vector<string> test_v;              //assume this is filled with various strings
vector<Node*> N;
map<LR0Item,Node*,my_struct> nmap;

LR0Item* Q = new LR0Item("test", test_v, 3);     //1 - error occurs here
Node* N1 = new Node(Q);                          //2 - error occurs here
N.push_back(N1);
nmap[*Q] = N1;

我在评论1上收到一个错误,说:
error: no matching function for call to 'LR0Item::LR0Item(std::string&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, int&)'|
note: candidates are: LR0Item::LR0Item()|
note:                 LR0Item::LR0Item(const LR0Item&)

我在评论2的错误说:
error: no matching function for call to 'Node::Node(LR0Item*&)'
note: candidates are: Node::Node()|
note:                 Node::Node(const Node&)

我不完全确定这里发生了什么或如何修复它。

编辑:为了澄清,不使用C++ 11。

最佳答案

您尚未为类(class)创建构造函数

您似乎想要一个用于LR0Item(const String&,vector,int)和一个用于Node(const LR0Item&)

将此添加到LR0Item:

LR0Item(const String& lhs_p, vector<string> rhs_p, int dpos_p)
     : lhs(lhs_p), rhs(rhs_p), dpos(dpos_p) {}

并将其添加到Node:
Node(LR0Item * lr) : item(lr) {}

{}中添加初始化所需执行的其他操作

您也可能希望同时使用复制构造函数,因为一旦定义了构造函数,将没有默认的可用构造函数

如果您想更深入地了解这一点,请深入研究构造函数并重载operator =

10-06 07:56