联接的问题,这个怎么解决啊?
报的错误是这样的:
Compiling...
zifichuan.cpp
Linking...
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in libcpd.lib(delop.obj)
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/zifichuan.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
zifichuan.exe - 4 error(s), 0 warning(s)
问题点数:20、回复次数:3Top
1 楼lilachue(静水思雅)回复于 2003-12-01 14:58:21 得分 0
外部变量命名冲突。你程序有变量和外面变量重名了。
具体问题需要把你源码贴出来!Top
2 楼LOWGUN(两只白袜)回复于 2003-12-01 15:03:37 得分 0
这是程序代码,我这个写的很糟,目标是要解析(只是解析,而不是运算出结果)一个表达式,只有括号和AND 和OR,就是在定义其运算的优先级时思想比较混乱,这个算法可能是最差的,是不是可以定义个枚举类型来做,但是自己不会,烦请各位帮帮忙看看我这个该怎么样改进?
#include <iostream>
#include <string>
using namespace std;
#include <afx.h>
const int MaxStackSize=500;
typedef CString DataType;
class Stack
{
private:
CString Stacklist[MaxStackSize];
public:
// Stack(void);
void push(DataType item);
DataType pop(void);
int ClearStack(void)const;
DataType Peek(void) const;
int StackEmpty(void)const;
int StackFull(void)const;
int top;
};
void Stack::push(DataType item)
{
if(top == MaxStackSize-1)
{
cout <<"Stack overflow!"<<endl;
}
top++;
Stacklist[top]=item;
}
DataType Stack::pop(void)
{
DataType temp;
if (top == -1)
{
cout <<"Attempt pop an empty stack!"<<endl;
}
temp= Stacklist[top];
top--;
return temp;
}
DataType Stack::Peek(void)const
{
if(top==-1)
cout<<"Attempt peek an empty stack!"<<endl;
return Stacklist[top];
}
int Stack::StackEmpty(void)const
{
return top==-1;
}
int Stack::StackFull(void)const
{
return top==MaxStackSize-1;
}
int Stack::ClearStack(void)const
{
return top ==-1;
}
void main(void)
{
// string z;
Stack DataStack;
Stack SmboleStack;
Stack tmpstackd;
Stack tmpstacks;
int n=0;
int t=0;
int p=0;
char *p1=0;
char *p2=0;
char str[100];
memset(str,0,100);
char SumString[500];
memset(SumString,0,500);
CString smbole;
CString s;
char result1[100];
memset(result1,0,100);
char result2[100];
memset(result2,0,100);
// char DataStack[30];
// char DataArray[100];
// DataStack=&DataArray;
CString operand1;
CString operand2;
CString tmpd1;
CString tmpd2;
CString tmpstr;
// char SmbolStack[100];
// enum oper
// {
// lbracket,
// rbracket,
// and,
// or,
// };
// DataStack=SumString;
cout<<"请输入逻辑表达式:"<<endl;
cin.getline(SumString,499);
cout<<"输入的逻辑表达式为:"<<SumString<<endl;
n=strlen(SumString);
for(int i=0;i<n;i++)
switch(t)
{
case 0:
if(SumString[i]=='('&&(SumString[i+1]=='and'||SumString[i+1]=='or'||SumString[i+1]=='&'||SumString[i+1]=='|'))
cout<<"输入有误,前括号后不能跟操作符,请重新输入!"<<endl;
break;
case 1:
if(SumString[i]==')'&&(SumString[i+1]!='and'||SumString[i+1]!='or'||SumString[i+1]!='&'||SumString[i+1]!='|'))
cout<<"输入有误,后括号后只能跟操作符,请重新输入!"<<endl;
break;
case 2:
if((SumString[i]!='('||SumString[i]!=')'||SumString[i]!='and'||SumString[i]!='or'||SumString[i]!='&'||SumString[i]!='|')&&(SumString[i+1]=='('||SumString[i+1]==')'||SumString[i+1]=='and'||SumString[i+1]=='or'||SumString[i+1]=='&'||SumString[i+1]=='|'))
cout<<"输入有误,运算符后只能跟操作数,请重新输入!"<<endl;
break;
case 3:
if((SumString[i]=='('||SumString[i]=='and'||SumString[i]=='or'||SumString[i]=='&'||SumString[i]=='|')&&(SumString[i+1]!='('||SumString[i+1]!=')'||SumString[i+1]!='and'||SumString[i+1]!='or'||SumString[i+1]!='&'||SumString[i+1]!='|'))
cout<<"输入有误,操作数后只能跟运算符,请重新输入!"<<endl;
break;
}
p1=SumString;
for(i=0;i<n;i++)
if(SumString[i]==' '||SumString[i]=='\n'||SumString[i]=='('||SumString[i]==')')
{
if(SumString[i]=='(')
SmboleStack.push(SumString[i]);
else
{
p2=&SumString[i];
p=p2-p1;
strncpy(str,SumString,p);
if(str!="and"||str!="or")
DataStack.push(str);
else
{
if(str=="and")
{
SmboleStack.push(str);
p1=&SumString[i+1];
operand1=DataStack.pop();
operand2=str;
tmpstr=tmpd1+"and"+tmpd2;
DataStack.push(tmpstr);
}
else
SmboleStack.push(str);
p1=&SumString[i+1];
}
}
if(str==")")
do {
operand1=DataStack.pop();
operand2=DataStack.pop();
smbole==SmboleStack.pop();
if(smbole=="and")
{
tmpstr=operand1+smbole+operand2;
tmpstackd.push(tmpstr);
}
else
if(smbole=="or")
{
tmpstackd.push(operand1);
tmpstackd.push(operand2);
tmpstacks.push("or");
}
else
do{
tmpd1=tmpstackd.pop();
tmpd2=tmpstackd.pop();
smbole=tmpstacks.pop();
tmpstr=tmpd1+smbole+tmpd2;
tmpstackd.push(tmpstr);
}while (SmboleStack.StackEmpty());
}while (smbole=="(");
}
cout <<"求得的值为:"<< DataStack.Peek()<<endl;
}
Top
3 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2003-12-01 15:06:48 得分 20
1.重复定义delete函数
2。没有链接线程库Top




