C++引用类函数错误:标识符未定义
问题描述:
我想为我的堆栈类调用一个函数。如果我拥有主文件中的所有函数,那么项目就可以工作,但是,当从类中调用时,它说错误:标识符“函数名称”未定义。我认为这是一个简单的语法错误,但我找不到它。C++引用类函数错误:标识符未定义
的main.cpp
#include<iostream>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "stack.h"
#define MAX 10
#define EMPTY -1
struct stack
{
char data[MAX];
int top;
};
int mystack::isempty(struct stack *s)
{
return (s->top == EMPTY) ? 1 : 0;
}
void mystack::emptystack(struct stack* s)
{
s->top=EMPTY;
}
void mystack::push(struct stack* s,int item)
{
if(s->top == (MAX-1))
{
printf("\nSTACK FULL");
}
else
{
++s->top;
s->data[s->top]=item;
}
}
char mystack::pop(struct stack* s)
{
char ret=(char)EMPTY;
if(!isempty(s))
{
ret= s->data[s->top];
--s->top;
}
return ret;
}
void mystack::display(struct stack s)
{
while(s.top != EMPTY)
{
printf("\n%d",s.data[s.top]);
s.top--;
}
}
int isoperator(char e)
{
if(e == '+' || e == '-' || e == '*' || e == '/' || e == '%' || e == '^')
return 1;
else
return 0;
}
int priority(char e)
{
int pri = 0;
if(e =='%' || e == '^')
pri = 3;
else
{
if (e == '*' || e == '/' || e =='%')
pri = 2;
else
{
if(e == '+' || e == '-')
pri = 1;
}
}
return pri;
}
void infix2postfix(char* infix, char * postfix, int insertspace)
{
char *i,*p;
struct stack X;
char n1;
emptystack(&X); // any time a class like this is called it says Error: identifier "emptystack"
// is undefined
i = &infix[0];
p = &postfix[0];
while(*i)
{
while(*i == ' ' || *i == '\t')
{
i++;
}
if(isdigit(*i) || isalpha(*i))
{
while(isdigit(*i) || isalpha(*i))
{
*p = *i;
p++;
i++;
}
if(insertspace)
{
*p = ' ';
p++;
}
}
if(*i == '(')
{
push(&X,*i);
i++;
}
if(*i == ')')
{
n1 = pop(&X);
while(n1 != '(')
{
*p = n1;
p++;
if(insertspace)
{
*p = ' ';
p++;
}
n1 = pop(&X);
}
i++;
}
if(isoperator(*i))
{
if(mystack::isempty(&X))
push(&X,*i);
else
{
n1 = pop(&X);
while(priority(n1) >= priority(*i))
{
*p = n1;
p++;
if(insertspace)
{
*p = ' ';
p++;
}
n1 = pop(&X);
}
push(&X,n1);
push(&X,*i);
}
i++;
}
}
while(!isempty(&X))
{
n1 = pop(&X);
*p = n1;
p++;
if(insertspace)
{
*p = ' ';
p++;
}
}
*p = '\0';
}
int main()
{
char in[50],post[50];
strcpy(&post[0],"");
printf("Enter Infix Expression : ");
fflush(stdin);
gets(in);
infix2postfix(&in[0],&post[0],1);
printf("Postfix Expression is : %s\n",&post[0]);
return 0;
}
stack.h
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
using namespace std;
class mystack
{
public:
int isempty(struct stack *s);
void emptystack(struct stack* s);
void push(struct stack* s,int item);
char pop(struct stack* s);
void display(struct stack s);
};
我使用的Visual Studio是否有帮助。
编辑:添加评论为清晰。
感谢, 瑞安
答
在粗略地看一眼,这个功能:
void emptystack(struct stack* s)
{
s->top=EMPTY;
}
缺少范围操作符(::
),所以你可能是打算把它写为:
void mystack::emptystack(struct stack* s)
{
s->top=EMPTY;
}
我不确定这是否是您的问题,因为“我试图调用一个函数”有点含糊。您可能想要精确缩小发生错误的位置,然后使用其他信息编辑您的问题。
编辑:在你实现看多一点,我不知道为什么你创建的mystack
类的。看起来你只是想定义一些函数,这些函数在你的stack
结构上运行,而不需要类定义。如果你想这样做是出于某种不寻常的原因,那么在你调用它的成员函数之前,你必须实例化一个对象mystack
。性质的东西:
mystack * myStackObj = new mystack();
myStackObj->emptystack(&X);
虽然我不知道你为什么要这样做。另一种方法是将您的stack
结构转换为类,而不是将整个结构体作为类的成员,或者只需将data
和top
添加到类中。然后,如果你实例化了一个mystack
对象,它将拥有堆栈的数据,并可以调用自己数据上的方法。我还建议查看与C++类及其用法相关的教程/文档/书籍。 Here's one,但毫无疑问有很多其他人。
为什么你有一个仅使用其他类的成员变量的成员函数的类? – 2010-11-11 04:12:21
我不明白你的意思? – Ryan 2010-11-11 04:20:31