C+++【处女贴】老师给的一个题目,写出来报错看不懂,请高手不吝指教

千里于野 2009-12-08 09:45:56
【题目】3. 定义元素类型为int、元素个数不受限制的集合类Set,包括:<=(包含于)、==(相等)、!=(不等)、 |(并集)、 &(交集)、-(差集)、+=(增加元素)、-=(删除元素)等操作
【VS2008报错】
1>------ 已启动生成: 项目: intSet, 配置: Debug Win32 ------
1>正在链接...
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
1>D:\C++WorkPlace\C++ 郑滔\面向对象部分实习作业\3-intSet\intSet\Debug\intSet.exe : fatal error LNK1120: 1 个无法解析的外部命令
1>生成日志保存在“file://d:\C++WorkPlace\C++ 郑滔\面向对象部分实习作业\3-intSet\intSet\intSet\Debug\BuildLog.htm”
1>intSet - 2 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

【VC6报错(按F5)】
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\Windows\System32\KernelBase.dll', no matching symbolic information found.
HEAP[asd.exe]: Invalid address specified to RtlValidateHeap( 005D0000, 0012FEA8 )


【代码】
#include<iostream>
using namespace std;
//通过链表实现SET
class IntSet{
public:
struct IntNode{
int val;
IntNode *after;
};//链表节点
IntSet(){
head=NULL;
}
IntSet(int b){
IntNode tmp;
tmp.val=b;
this->head=(&tmp);
}
~IntSet(){
delete []head;
}
void operator +=(int b){
IntNode tmp;
tmp.val=b;
if(head==NULL)head=&tmp;//set为空
else if(head!=NULL&&b<head->val){
tmp.after=head;
head=&tmp;
}
else {
p=head;
for(;p&&p->val<b;p=p->after)q=p;
if(p->val!=b){
tmp.after=q->after;
q->after=&tmp;
}
if(p->val==b)free(&tmp);
}
}//增加元素,并且排序
void operator -=(int b){
p=head;
for(;p->val!=b;p=p->after)q=p;
if(p==NULL) cout<<b<<" is not in the set!";
else {
q->after=p->after;
delete p;
p=q->after;
}
}//删除元素

IntSet* operator |(IntSet b){
b.p=b.head;
for(;b.p;b.p=b.p->after)this->operator +=(b.p->val);
return this;
}//并集
IntSet* operator &(IntSet b){
this->p=this->head;
b.p=b.head;
while(this->p){
if(this->p->val==b.p->val){
this->p=this->p->after;
b.p=b.p->after;
}
if(this->p->val>b.p->val){
b.p=b.p->after;
}
if(this->p->val<b.p->val){
this->operator -=(this->p->val);
}
}
return this;
}//交集
IntSet* operator -(IntSet b){
this->p=this->head;
b.p=b.head;
while(this->p){
if(this->p->val==b.p->val){
this->operator -=(this->p->val);
b.p=b.p->after;
}
if(this->p->val>b.p->val){
b.p=b.p->after;
}
if(this->p->val<b.p->val){
this->p=this->p->after;
}
}
return this;
}//差集
bool operator ==(IntSet b){
this->p=this->head;
b.p=b.head;
while(this->p||b.p){
if(this->p->val!=b.p->after->val)
return 0;
this->p=this->p->after;
b.p=b.p->after;
}
return 1;
}//相等
bool operator <=(IntSet b){
return this==this->operator &(b);
}//包含于
bool operator !=(IntSet b){
return !(this->operator ==(b));
}//不等

void printSet(){
p=head;
while(p){
cout<<p->val<<" ";
p=p->after;
}
}
private:
IntNode *head,*p,*q;
};
int main(){
IntSet *a=new IntSet();
a->operator +=(2);
a->operator +=(3);
a->operator +=(4);
a->operator +=(5);
a->operator +=(6);
a->operator +=(7);
a->operator +=(8);
a->printSet();
a->operator -=(6);
a->operator -=(7);
a->printSet();
a->operator -=(3);
a->operator -=(5);
a->printSet();
return 0;
}
...全文
395 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
macrojj 2009-12-09
  • 打赏
  • 举报
回复
明显是建错工程了
console
改成
sang9323 2009-12-09
  • 打赏
  • 举报
回复
学习
jyy243270803 2009-12-09
  • 打赏
  • 举报
回复
我就是这个括号里的!
顶!
千里于野 2009-12-09
  • 打赏
  • 举报
回复
搞定了,谢谢各位不吝赐教,特别感谢“# ll120680451 # (BeanJoy)”
Jimdo_260122332 2009-12-09
  • 打赏
  • 举报
回复
up
FengRider 2009-12-09
  • 打赏
  • 举报
回复
MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
关键应该就在这吧,你要建的工程到底是Windows程序,还是命令行程序啊,这里改对了,才能编译生成正确的可执行的文件,后面肯定链接错误了,都没有生成exe文件出来,怎么链接过去。
SLY369 2009-12-09
  • 打赏
  • 举报
回复
为什么不用容器呢?是不是效率不好啊???
wo6092256 2009-12-09
  • 打赏
  • 举报
回复
C++的代码我看那的是最头疼的,整个一个长条,看着烦,还是c#得好看
wanghj_1118 2009-12-08
  • 打赏
  • 举报
回复
mark
有必要研究下``````
千里于野 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ll120680451 的回复:]
简单的看了一下,主要问题在于,增加元素时,你只是在函数里定义一个变量,然后把变量插入新去,并更改原来元素的指针.这样是不行了,因为在函数里定义的变量,生存周期仅限于函数内,除了函数外这个变量就没用了,当然指向它的指针也就没用了.你应该在函数里调用malloc()函数来分配空间才行,删除时再调用delete 函数来释放空间.
[/Quote]

这个不懂了。。。
还没学到那儿,能不能帮忙改写一下,many thanks
120680451 2009-12-08
  • 打赏
  • 举报
回复
简单的看了一下,主要问题在于,增加元素时,你只是在函数里定义一个变量,然后把变量插入新去,并更改原来元素的指针.这样是不行了,因为在函数里定义的变量,生存周期仅限于函数内,除了函数外这个变量就没用了,当然指向它的指针也就没用了.你应该在函数里调用malloc()函数来分配空间才行,删除时再调用delete 函数来释放空间.
yeah_aly 2009-12-08
  • 打赏
  • 举报
回复
关注~
千里于野 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ll120680451 的回复:]

我用VC编译没动,但运行有错,估计是这程序写的有问题.
楼是还是先看看代码吧.
[/Quote]
代码估计有BUG我也不容易找出来了。。。
VC里面按F5运行会出现这个:“‘D:\Programs Files\....\intSet.exe'文件没找到”
120680451 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 freedom0037 的回复:]
这下VC没报错了
不过运行不起来 看不到结果 哪位看到结果的说说过程吧,小生在此先行谢过了
[/Quote]
我用VC编译没动,但运行有错,估计是这程序写的有问题.
楼是还是先看看代码吧.
千里于野 2009-12-08
  • 打赏
  • 举报
回复
这下VC没报错了
不过运行不起来 看不到结果 哪位看到结果的说说过程吧,小生在此先行谢过了
jackyjkchen 2009-12-08
  • 打赏
  • 举报
回复
工程建错了,楼主没用模板,空工程即可
120680451 2009-12-08
  • 打赏
  • 举报
回复
有几个地方<<写成< <了,注意改了.
"MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用"
应该是楼主建成windows Application了,改成console程序就行了.
我用的是VC++,我是这样改的:工程-设置-连接,下面有个工程选项,找到/subsystem:windows,改成/subsystem:console,或者删了也行.
楼主自己找找看怎么改吧.
deng1243 2009-12-08
  • 打赏
  • 举报
回复
你应该是想建win32 console application
deng1243 2009-12-08
  • 打赏
  • 举报
回复
“无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup”

工程建错了吧
aizibion 2009-12-08
  • 打赏
  • 举报
回复
不晓得楼主得工程是不是建成windows应用程序了,貌似你需要得是一个console
加载更多回复(1)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧