代码无效。使用堆栈

时间:2016-10-12 07:12:19

标签: c++

这是我检查平衡括号的代码,它带有一个表达式并检查用户是否正确输入了表达式但是它不起作用。它给出了一个错误。我不这么认为公共事物有错误。 请帮助!

class dynamicStack {
    struct node{
        char num;
        node *next;
    };
    public:
    node *top;
    dynamicStack(){
        top=NULL;
    }
    void push(char);
    void pop();
    void check(string);
};

void check(string exp) {
    \\some code
}
void dynamicStack::pop(){
    node *temp;
    temp=top;
    if(top == NULL)  {
        cout<<"Stack is empty"<<endl;
    }
    else
        cout<<"Deleting number: "<<temp->num<<endl;
    top=top->next;
    delete temp;
}

void dynamicStack::push(char c) {
    node *newNode;
    newNode = new node;
    newNode->num=c;
    newNode->next=top;
    top=newNode;
}

int _tmain(int argc, _TCHAR* argv[])  {
    dynamicStack dS;
    string exp;
    cout<<"Enter an expression:  ";
    cin>>exp;
    dS.check(exp);

    system("pause");

    return 0;
}

它出现以下错误:

     1>ds-2.obj : error LNK2019: unresolved external symbol "public: void                    _thiscall dynamicStack::check(class std::basic_string<char,struct                      std::char_traits<char>,class std::allocator<char> >)" (?    check@dynamicStack@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function _wmain

2 个答案:

答案 0 :(得分:3)

您的实施

void check(string exp)

没有提及它的类范围。必读:

void dynamicStack::check(string exp) {
...
}

BTW这正是链接器消息试图告诉你的内容。当你遇到这些错误时,你经常会遇到类似错误的错误。

答案 1 :(得分:1)

Member functions(您的程序中的函数check)可以在类定义中定义,也可以使用scope resolution operator :: 在类外单独定义。如果要在类外部定义某些函数,可以使用范围解析运算符::,如下所示:

void dynamicStack :: check(string exp)
{
    //Do something
}

在您的程序中,您忘记了函数check()的范围解析运算符。您提供的错误(unresolved external symbol)是因为您一直使用dS调用ds.check()对象的成员函数,但编译器没有找到成员函数{{1的实现}}。没有范围解析运算符的函数定义被视为一个单独的函数。

在类定义中定义成员函数会声明函数内联,即使您不使用内联说明符。