错误:未在此范围内声明函数。救命?

时间:2011-04-02 00:30:49

标签: c++

这是我的代码的一部分:

...

 Node<char*>* nodes[count2];//array of pointers to last level
    nodes[0] = f1.rootPtr;
    processInput(input, f1.rootPtr, nodes, 0, count2);
    //I get an error that says this function is not declared in this scope.

    return input;

}

void processInput(istream& input, Node<char*>* node, Node<char*>** nodeArray,
        int level, int& count)
{
    //variables
    Node<char*>* aNode = new Node<char*>();
    char charArray[150];
...

当我运行程序时,我得到了这个:

Forest.cpp: In function 'std::istream& operator>>(std::istream&, Forest<char*>&)':
Forest.cpp:93:53: error: 'processInput' was not declared in this scope
make[2]: *** [build/Debug/MinGW-Windows/Forest.o] Error 1
make[1]: *** [.build-conf] Error 2

以下是头文件的一部分:

template<typename NODETYPE> class Forest{

    /*
     * builds a forests consisting of the first and second forest reference
     */
    template<NODETYPE>
    friend Forest& operator+(Forest<NODETYPE>& f1, Forest<NODETYPE>& f2);

    /*
     * insert into the output stream a preorder traversal of the input forest
     */
    template<NODETYPE>
    friend ostream& operator<<(ostream& ostr, const Forest<NODETYPE>& f1);

    /*
    * extracts a forest from the input stream and builds it for the forest argument variable name
    */
    //template<NODETYPE>
    friend istream& operator>>(istream& file, Forest<char*>& f1);

    /*
     *Used with istream to go through input
     */
    //template<NODETYPE>
    void processInput(istream& input, Node<char*>* nodeBefore, Node<char*> ** nodeArray,
        int levelBefore, int& count);

public:
    Forest(){

..

我做错了什么?为什么我会收到这个错误。有什么建议?

谢谢!

编辑:

我试过你所说的,但它仍然没有用。我虽然使用模板,所以也许这就是我的问题所在?

部首:

模板//我应该保留这个?当我把它拿出来它也行不通     朋友istream&amp;运算符&gt;&gt;(istream&amp; file,Forest&amp; f1);

私人:
 void processInput(istream&amp; input,Node * node,Node ** nodeArray,         int level,int&amp;计数);

.cpp文件:

模板 istream的&安培;运营商GT;&GT; (istream&amp; input,Forest&amp; f1){ //码 ... processInput(input,f1.rootPtr,nodes,0,count2); //错误:无法解析标识符processInput }

/ **   *处理输入   / void Forest :: processInput(istream&amp; input,Node node,Node ** nodeArray,int level,int&amp; count){     //代码

再次感谢。

1 个答案:

答案 0 :(得分:0)

你需要在你的班级函数前面加上他们班级的名字,你现在这样做吗?如果没有,编译器认为它们是自由函数。

例如,

void processInput(istream& input, Node<char*>* node, Node<char*>** nodeArray,
    int level, int& count) {
    // ...code...
}

应该是

void Forest::processInput(istream& input, Node<char*>* node, Node<char*>** nodeArray,
    int level, int& count) {
    // ...code...
}