青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
Tauruser
Enjoy Every Day
posts - 34, comments - 95, trackbacks - 0, articles - 5
C++博客
::
首頁
::
新隨筆
::
聯(lián)系
::
聚合
::
管理
為什么在VS2005重載輸出運(yùn)算符那么難?
Posted on 2006-03-14 23:48
Tauruser
閱讀(1705)
評論(7)
編輯
收藏
引用
所屬分類:
算法與數(shù)據(jù)結(jié)構(gòu)
最近在VS2005下實(shí)現(xiàn)一個(gè)模版堆棧時(shí),想重載一下輸出運(yùn)算符。結(jié)果老是遇到問題,如何都過不去,想不想去都不明白。還望高手指教。
一開始同樣的程序在VC2005和VC6.0下編譯都沒問題,但是一到鏈接的時(shí)候就出現(xiàn)問題了。都提示如下錯誤:
error LNK2019: 無法解析的外部符號
"
class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class SegStack<int> const &)
"
(
??
6
@YAAAV
?
$basic_ostream@DU
?
$char_traits@D@std@@@std@@AAV01@ABV
?
$SegStack@H@@@Z),該符號在函數(shù) _main 中被引用
死活都運(yùn)行不了。后來發(fā)現(xiàn)如果在程序中不使用“cout<<”重載的運(yùn)算符進(jìn)行輸出,在兩個(gè)平臺下都沒有問題。可以重載的方式我已經(jīng)全部按語法寫了。
今晚,又在VC6.0下再生成一次,奇跡般成功了。(PS:難道今晚的RP比較高 ^-^)但是還是沒有解決在VC2005下的問題,還是提示如上錯誤,VC2005到底還改了什么,與VC6.0不同了?一模一樣的程序,為什么在VC2005下都不行,在VC2005下的重載輸入輸出應(yīng)該如何應(yīng)該如何?
下面貼一下例程,麻煩有時(shí)候的大牛幫我看一下,很簡單的一個(gè)程序。
Ex2_2.rar
里面有三個(gè)文件分別如下:(ex2_2.cpp,stack.cpp,stack.h)下面貼一下文件的內(nèi)容。
/**/
/////////
/ex2_2.cpp
/////////
//
//////////////////////////////
#include
"
stack.cpp
"
SegStack
<
int
>
iStack(
10
);
int
main()
{
for
(
int
i(
0
);i
<
10
;i
++
)
iStack.push(i);
cout
<<
iStack;
iStack.output(cout);
for
(i
=
0
;i
<
5
;i
++
)
iStack.pop();
cout
<<
iStack;
return
0
;
}
/**/
/////////
//stack.h
/////////
/
//////////////////////////////
/
#ifndef stack_h_
#define
stack_h_
#include
<
iostream
>
using
namespace
std;
template
<
class
T
>
class
stack
{
public
:
virtual
void
push(
const
T
&
x)
=
0
;
virtual
void
pop()
=
0
;
virtual
T Top()
const
=
0
;
virtual
bool
IsEmpty()
const
=
0
;
virtual
bool
IsFull()
const
=
0
;
}
;
template
<
class
T
>
class
SegStack:
public
stack
<
T
>
{
public
:
SegStack(
int
mSize);
~
SegStack();
bool
IsEmpty()
const
;
bool
IsFull()
const
;
void
push(
const
T
&
x);
void
pop();
T Top()
const
;
friend ostream
&
operator
<<
(ostream
&
out
,
const
SegStack
<
T
>&
seg);
void
output(ostream
&
out
)
const
;
private
:
T
*
s;
int
maxSize;
int
top;
}
;
#endif
/**/
////////////
stack.cpp
////////////
/////////////////////////////////
//
#include
"
stack.h
"
template
<
class
T
>
SegStack
<
T
>
::SegStack(
int
mSize):top(
-
1
)
{
maxSize
=
mSize;
s
=
new
T[maxSize];
}
template
<
class
T
>
SegStack
<
T
>
::
~
SegStack()
{
delete []s;
}
template
<
class
T
>
bool
SegStack
<
T
>
::IsFull()
const
{
return
(top
==
(maxSize
-
1
));
}
template
<
class
T
>
bool
SegStack
<
T
>
::IsEmpty()
const
{
return
(top
==-
1
);
}
template
<
class
T
>
void
SegStack
<
T
>
::push(
const
T
&
x)
{
if
(IsFull())
{
cout
<<
"
The stack is full
"
<<
endl;
}
else
{
s[
++
top]
=
x;
}
}
template
<
class
T
>
void
SegStack
<
T
>
::pop()
{
if
(IsEmpty())
{
cout
<<
"
The stack is empty
"
<<
endl;
}
else
{
top
--
;
}
}
template
<
class
T
>
T SegStack
<
T
>
::Top()
const
{
return
s[top];
}
template
<
class
T
>
void
SegStack
<
T
>
::output(ostream
&
out
)
const
{
out
<<
"
The stack list is:
"
;
for
(
int
i(
0
);i
<=
top;i
++
)
out
<<
"
"
<<
s[i];
out
<<
endl;
}
template
<
class
T
>
ostream
&
operator
<<
(ostream
&
out
,
const
SegStack
<
T
>&
seg)
{
out
<<
"
The stack list is:
"
;
for
(
int
i(
0
);i
<=
seg.top;i
++
)
out
<<
"
"
<<
seg.s[i];
out
<<
endl;
//
seg.output(out);
return
out
;
}
在最后,我還想問的一個(gè)問題是:為什么在ex2_2.cpp里#include "stack.h"時(shí)會無法編譯通過,而#include "stack.cpp"時(shí)就可以了呢?
記得我剛學(xué)C++的時(shí)候,老師跟我說把頭文件和源程序文件分開,最主要的是要進(jìn)行知識產(chǎn)權(quán)保護(hù),當(dāng)你寫好一個(gè)子程序時(shí),發(fā)布就不要給對方源程序,只要給對方頭文件和編譯過來的相應(yīng)obj文件就可以了。但是從上面的例子上看來,如果不#include "stack.cpp"就無法編譯通過,這不就代表一定要給源程序?qū)Ψ絾幔繛槭裁磿@樣子的。我應(yīng)該如何做呢?如果我想實(shí)現(xiàn)源程序的保存。
Feedback
#
re: 為什么在VS2005重載輸出運(yùn)算符那么難?
回復(fù)
更多評論
2006-03-15 01:16 by
dhong
class SegStack里面這么寫:
template < class T1 >
friend ostream& operator << (ostream& out,const SegStack<T1>& seg);
這個(gè)operator不是SegStack的成員,因此不多寫一個(gè)template這個(gè)operator就不是template的了
template的申明和定義一般都放入.h中,而不是.cpp,原因之一是template需要被實(shí)例化時(shí)必須保證編譯器能找到實(shí)現(xiàn)
反過來想,如果template的定義都在.cpp中,那這個(gè)cpp被編譯時(shí)至多產(chǎn)生一種T的實(shí)現(xiàn)(多半不會產(chǎn)生實(shí)際代碼,編譯器根本無從知曉T到底是什么類型),那么不妨假設(shè)其他cpp中有至少兩種不同的T,那么編譯器該如何連接呢?呵呵
因此目前為止,幾乎所有編譯器都要求需要展開template時(shí)能找到定義,于是形成了template定義不放在.cpp中的慣例
#
re: 為什么在VS2005重載輸出運(yùn)算符那么難?
回復(fù)
更多評論
2006-03-15 12:03 by
Tauruser
真的可以了,困撓我一個(gè)星期的問題終于解決了,順便再問一下,為什么在VC6.0里不用再多加一個(gè)template <class T1>也可以成功運(yùn)行呢?
#
re: 為什么在VS2005重載輸出運(yùn)算符那么難?
回復(fù)
更多評論
2006-03-15 21:16 by
dhong
不知道,這個(gè)要問ms,呵呵。vc6誕生的年代,c++標(biāo)準(zhǔn)關(guān)于模版的規(guī)定還很不完善,vc6出現(xiàn)一些令人難以理解的問題不必深究,對模板使用比較多的應(yīng)用,多使用對c++98支持比較好的編譯器較好,比如g++、vc71 above
#
re: 為什么在VS2005重載輸出運(yùn)算符那么難?
回復(fù)
更多評論
2006-03-17 11:07 by
jemmy
VC6 對C++標(biāo)準(zhǔn)支持不好,2003/2005卻支持的很好
#
re: 為什么在VS2005重載輸出運(yùn)算符那么難?
回復(fù)
更多評論
2006-03-19 21:25 by
Ninputer
可以把export template放在CPP里,然后把template放到h里。不過這一特性還沒有發(fā)現(xiàn)支持的編譯器……
#
re: 為什么在VS2005重載輸出運(yùn)算符那么難?
回復(fù)
更多評論
2007-04-05 11:31 by
polyrandom
這個(gè)問題也可以用顯式初始化解決。
如果你知道你將會在別的cpp里面用到Stack<int>,你可以在stack.cpp里面寫:
template Stack<int>;
template ostream& operator <<(ostream& out,const SegStack<int>& seg);
不過你把operator<<寫成friend可不是很好
#
re: 為什么在VS2005重載輸出運(yùn)算符那么難?
回復(fù)
更多評論
2009-05-23 23:00 by
yyf
如果一定要是類型綁定的,那怎么辦呢?
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
雙鏈表模版類的實(shí)現(xiàn)
C風(fēng)格字符串與標(biāo)準(zhǔn)庫string類型性能對比
算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)(二)
為什么在VS2005重載輸出運(yùn)算符那么難?
我的算法與數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)(三)
Josephus問題
算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)(一)
我的算法與數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)(二)
我的算法與數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)(一)
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © Tauruser
日歷
<
2006年3月
>
日
一
二
三
四
五
六
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
公告
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(7)
給我留言
查看公開留言
查看私人留言
隨筆分類
(16)
MFC(2)
計(jì)算機(jī)圖形學(xué)(2)
密碼學(xué)
數(shù)學(xué)模型
數(shù)值計(jì)算(2)
算法與數(shù)據(jù)結(jié)構(gòu)(9)
信息論(1)
隨筆檔案
(34)
2007年3月 (1)
2007年2月 (2)
2007年1月 (1)
2006年10月 (1)
2006年6月 (3)
2006年5月 (5)
2006年4月 (6)
2006年3月 (14)
2006年2月 (1)
文章分類
(5)
密碼學(xué)
數(shù)學(xué)模型
數(shù)值計(jì)算
算法與數(shù)據(jù)結(jié)構(gòu)(4)
網(wǎng)絡(luò)(1)
信息論
文章檔案
(5)
2006年4月 (1)
2006年3月 (4)
相冊
文章貼圖
收藏夾
(3)
我的收藏(3)
協(xié)議
流媒體
中國協(xié)議網(wǎng)
友情鏈接
Orlaa
最新隨筆
1.?CListCtrl For Beginners(轉(zhuǎn)載)
2.?結(jié)構(gòu)體對齊的具體含義(#pragma pack) (轉(zhuǎn)載)
3.?MFC ComboBox 使用方法(轉(zhuǎn)載)
4.?05年寫的直線裁剪算法
5.?C# Coding時(shí)的注釋格式(zz)
6.?查找字符串的哈希方法(zz)
7.?木馬客戶端與服務(wù)端通訊如何隱藏不被發(fā)現(xiàn)
8.?Gauss消去法直接求解方程組(附例程)
9.?使用AsycnSocket類進(jìn)行簡單雙機(jī)通訊
10.?Romberg求積(例程)
搜索
積分與排名
積分 - 107013
排名 - 238
最新評論
1.?re: 雙鏈表模版類的實(shí)現(xiàn)
問下:關(guān)于查找(search)那部分,我有點(diǎn)小問題要問,就是你直接就靠默認(rèn)的比較操作符來比較,而你所用的是模版,鏈表支持各種類型,那么是字符串類型的鏈表或自定義類型的呢,你該怎么辦
--周曉榮
2.?re: OnSize()加入處理函數(shù)后,DEBUG報(bào)告出錯
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--NULL
3.?re: C風(fēng)格字符串與標(biāo)準(zhǔn)庫string類型性能對比
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--Hzj_jie
4.?re: 05年寫的直線裁剪算法
你這個(gè)算法也太復(fù)雜了吧
--啊啊啊啊啊啊
5.?re: C++ Primer Fourth Edition (download file)
i want english edition
--zhccc
閱讀排行榜
1.?MFC ComboBox 使用方法(轉(zhuǎn)載)(18768)
2.?結(jié)構(gòu)體對齊的具體含義(#pragma pack) (轉(zhuǎn)載)(11484)
3.?Tab Control控件使用的例子(zz)(8377)
4.?MAC地址有合法不合法之分嗎?(7634)
5.?VC++2005 比 VC++ 6.0 退步了?(7563)
評論排行榜
1.?C風(fēng)格字符串與標(biāo)準(zhǔn)庫string類型性能對比(20)
2.?VC++2005 比 VC++ 6.0 退步了?(12)
3.?OnSize()加入處理函數(shù)后,DEBUG報(bào)告出錯(8)
4.?為什么在VS2005重載輸出運(yùn)算符那么難?(7)
5.?Gauss消去法直接求解方程組(附例程)(7)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
欧美一区二区三区日韩
|
亚洲国产精品一区二区久
|
欧美激情一区在线观看
|
国产精品日本精品
|
亚洲精品一区二区三区福利
|
亚洲综合大片69999
|
欧美黄色aaaa
|
久久精品123
|
国产亚洲精品美女
|
在线综合亚洲欧美在线视频
|
久久国产精彩视频
|
一区二区欧美国产
|
欧美大秀在线观看
|
亚洲国产成人在线
|
99在线热播精品免费
|
欧美精品在线一区
|
亚洲精品美女在线观看播放
|
亚洲青涩在线
|
久久精品国产99
|
亚洲私人影吧
|
欧美色精品天天在线观看视频
|
1024亚洲
|
欧美电影资源
|
免费不卡在线观看
|
亚洲国产99精品国自产
|
99精品欧美一区二区蜜桃免费
|
国产一区二区观看
|
亚洲日本黄色
|
国产亚洲一区精品
|
亚洲精品欧美极品
|
欧美日韩人人澡狠狠躁视频
|
亚洲视频免费
|
亚洲午夜激情免费视频
|
亚洲福利小视频
|
亚洲欧美成人一区二区三区
|
国产精品综合久久久
|
性色av一区二区三区红粉影视
|
亚洲视频在线视频
|
亚洲卡通欧美制服中文
|
亚洲精品国产无天堂网2021
|
国产午夜精品麻豆
|
男女激情视频一区
|
欧美精品18+
|
久久一区免费
|
欧美精品1区
|
欧美国产日韩亚洲一区
|
国产女人精品视频
|
狼人天天伊人久久
|
欧美精品99
|
欧美黑人多人双交
|
亚洲福利视频网
|
香蕉精品999视频一区二区
|
激情久久五月
|
亚洲日本va午夜在线影院
|
韩国精品在线观看
|
日韩视频在线一区二区
|
国产精品久久久久久久久久三级
|
午夜国产精品影院在线观看
|
亚洲专区在线
|
欧美激情一区在线观看
|
欧美岛国在线观看
|
在线观看日韩av电影
|
亚洲女人天堂成人av在线
|
99精品国产高清一区二区
|
亚洲一区观看
|
91久久久久久
|
亚洲综合第一
|
欧美一区二区视频网站
|
免费高清在线视频一区·
|
久久亚洲电影
|
一区二区在线视频播放
|
久久欧美中文字幕
|
午夜一区二区三区在线观看
|
久久黄色影院
|
久久久亚洲国产美女国产盗摄
|
欧美经典一区二区
|
亚洲日本在线观看
|
亚洲少妇诱惑
|
国产欧美91
|
久久免费精品视频
|
亚洲电影免费在线
|
国产一区二区激情
|
久久久www成人免费毛片麻豆
|
这里只有精品丝袜
|
国产精品丝袜久久久久久app
|
午夜精品区一区二区三
|
麻豆精品在线观看
|
亚洲精品久久久久久一区二区
|
欧美日韩免费网站
|
亚洲欧美日韩国产精品
|
亚洲欧美国产不卡
|
欧美视频中文一区二区三区在线观看
|
亚洲视频欧美在线
|
99视频在线精品国自产拍免费观看
|
久久久久久**毛片大全
|
国产精品乱码人人做人人爱
|
性欧美xxxx大乳国产app
|
老**午夜毛片一区二区三区
|
亚洲美女在线观看
|
国产精品自拍网站
|
免费亚洲婷婷
|
亚洲黄一区二区
|
亚洲欧洲精品成人久久奇米网
|
欧美日韩另类丝袜其他
|
欧美一区二区视频在线观看
|
亚洲激情电影在线
|
欧美一区二区三区在线观看
|
亚洲人成在线观看网站高清
|
国产日韩欧美电影在线观看
|
欧美精品久久99
|
久久精品视频在线
|
中文有码久久
|
欧美二区不卡
|
久久国产精品久久久久久电车
|
日韩亚洲不卡在线
|
欲色影视综合吧
|
国产精品一区视频
|
欧美区日韩区
|
久久人人爽人人爽
|
欧美亚洲在线观看
|
aa级大片欧美
|
欧美国产激情二区三区
|
久久精品视频免费观看
|
亚洲欧美视频一区
|
亚洲天堂av综合网
|
亚洲看片一区
|
亚洲精品视频免费
|
伊人男人综合视频网
|
欧美一区二区久久久
|
久久久97精品
|
性做久久久久久久久
|
一区二区久久
|
亚洲精品久久久久久一区二区
|
永久91嫩草亚洲精品人人
|
国产欧美日韩综合精品二区
|
欧美日韩在线高清
|
欧美日韩亚洲一区
|
欧美日韩ab片
|
欧美一区二区视频97
|
亚洲在线观看视频网站
|
亚洲视频在线二区
|
一区二区三区四区蜜桃
|
99ri日韩精品视频
|
一区二区免费看
|
一区二区三区国产盗摄
|
日韩视频第一页
|
亚洲一区影院
|
欧美一区二区福利在线
|
欧美一区二区三区视频免费播放
|
亚洲在线视频观看
|
欧美一级欧美一级在线播放
|
午夜激情亚洲
|
久久久91精品国产
|
欧美不卡视频一区
|
欧美国产亚洲另类动漫
|
久久成人综合视频
|
久久久欧美精品sm网站
|
亚洲综合久久久久
|
亚洲欧美日本在线
|
久久久福利视频
|
另类天堂av
|
久久久久久亚洲综合影院红桃
|
久久精品水蜜桃av综合天堂
|
久久久久久久波多野高潮日日
|
免费短视频成人日韩
|
欧美日韩激情网
|
国产欧美午夜
|
亚洲欧洲一区
|
亚洲一区国产视频
|
久久久久久亚洲综合影院红桃
|
美日韩精品免费
|
久久在线播放
|
亚洲毛片av在线
|
性欧美在线看片a免费观看
|
久久久久久久性
|
欧美精选在线
|
国产一区二区日韩
|
99一区二区
|
久久精品人人爽
|
亚洲日本欧美天堂
|
午夜一区在线
|
欧美激情中文字幕乱码免费
|
国产精品日韩欧美一区
|
亚洲国产精品va在线看黑人动漫
|
一本高清dvd不卡在线观看
|
久久精精品视频
|
91久久午夜
|
久久精品天堂
|
国产精品亚洲欧美
|
99视频精品在线
|
免费亚洲婷婷
|
亚洲综合第一
|
欧美日韩国产首页在线观看
|
国产一区二区毛片
|
亚洲欧美成aⅴ人在线观看
|
欧美激情一区二区三区全黄
|
欧美在线播放视频
|
免费观看成人
|
国产午夜精品美女视频明星a级
|
亚洲欧洲一区二区三区久久
|