传递对指针的引用

时间:2014-11-24 03:29:48

标签: c++ pointers reference overloading private

我遇到了私有递归辅助函数的问题,我在指针中传递了一个引用。我收到一条错误

“没有重载函数的实例”insertSymbol“匹配参数列表。参数类型为:(String,Expression *)”

我认为我误解了传递引用的内容。有人可以帮助我吗?

struct ExpressionTree {
    private:
        Expression* root;

        bool insertSymbol(String& symbol, Expression*& root) {
            if (root == nullptr) { // base case
                root = new Expression(symbol);
                return true;
            }

            if ((*(*root).getSymbol()).c_str()[0] == '~') { 
                return insertSymbol(symbol, (*root).getLeftChild()); // Error occurs here
            }
        }

    public:
        ExpressionTree(void) {
            root = 0x00;
        }

        // returns true if insert was successful, otherwise returns false
        bool insertSymbol(String& symbol) {
            if (symbol.size == 0) return false;
            return insertSymbol(symbol, root); // Calls recursive helper function
        }
};

1 个答案:

答案 0 :(得分:2)

您无法绑定对临时的引用。一个可能的解决方案是:

bool insertSymbol(String& symbol, Expression*& root) {
    if (root == nullptr) { // base case
        root = new Expression(symbol);
        return true;
    }
    return insertSymbolHelper(symbol, root);
}

bool insertSymbolHelper(String& symbol, Expression* root) {
    if ((*(*root).getSymbol()).c_str()[0] == '~') { 
        return insertSymbolHelper(symbol, (*root).getLeftChild()); // Error occurs here
    }
    // rest of code goes here
}