gpt4 book ai didi

C++引用类函数错误: identifier is undefined

转载 作者:太空狗 更新时间:2023-10-29 19:50:05 25 4
gpt4 key购买 nike

我正在尝试为我的堆栈类调用一个函数。如果我在主文件中拥有所有函数,则该项目可以正常工作,但是,当从类中调用时,它会显示错误:标识符“函数名称”未定义。我认为这是一个简单的语法错误,但我找不到它。

主要.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;
}

堆栈.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 结构滚动到类中,方法是使整个结构成为该类的成员,或者通过简单地添加 datatop 到类(class)。然后,如果您实例化一个 mystack 对象,它将拥有堆栈的数据并可以调用其自身数据的方法。我还建议查看与 C++ 类及其用法相关的教程/文档/书籍。 Here's one , 但毫无疑问还有很多其他的。

关于C++引用类函数错误: identifier is undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com