亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 6701 | 回復(fù): 15
打印 上一主題 下一主題

[C++] multiple definition of的疑問(wèn) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2013-09-23 15:59 |只看該作者 |倒序?yàn)g覽
  1. // ----------------------------------------------------------------------- Test.h
  2. #include <iostream>

  3. class Test
  4. {
  5. public:
  6.     Test();
  7.     ~Test();
  8.    
  9.     // 寫在這里不會(huì)報(bào)“multiple definition of”
  10.     void test1(void)
  11.     {
  12.         std:: cout << "test1" << endl;
  13.     }
  14.    
  15.     void test2(void);
  16.    
  17.     void test3(void);
  18. };

  19. // 如果寫Test.h的這里就會(huì)報(bào)“multiple definition of”
  20. void Test::test2(void)
  21. {
  22.    std:: cout << "test2" << endl;
  23. }

  24. // 加了inline關(guān)鍵字的函數(shù)就不會(huì)報(bào)“multiple definition of”
  25. inline void Test::test3(void)
  26. {
  27.    std:: cout << "test3" << endl;
  28. }
復(fù)制代碼
  1. // ----------------------------------------------------------------------- Main.cpp
  2. #include "Test.h"

  3. int main(void)
  4. {
  5.     Test t;
  6.     t.testMethod();
  7.     return 0;
  8. }
復(fù)制代碼


直接在類聲明中定義的test1是不是內(nèi)聯(lián)函數(shù)?不管代碼塊多大總是內(nèi)聯(lián)?

為什么test1(), test2()不會(huì)被提示multiple definition of,而test3()會(huì)被提示?

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2013-09-23 16:53 |只看該作者
1.對(duì)于頭文件,為了防止被重復(fù)引用,可以使用
#pragma once
或者
#ifndef  XXX (以Test.h為例,那么這個(gè)XXX就是TEST_H)
#define XXX

#endif

2.類成員的實(shí)現(xiàn)部分不要寫在頭文件中,而是得寫在相應(yīng)的源文件中,例如Test.cpp

3.內(nèi)聯(lián)函數(shù)去解決 “重復(fù)定義”的問(wèn)題,那只是偶然,跟它一點(diǎn)關(guān)系都沒有。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2013-09-23 17:01 |只看該作者
內(nèi)聯(lián)函數(shù)解決重復(fù)定義是不是在編譯階段函數(shù)被內(nèi)聯(lián)掉了,也就沒有那個(gè)函數(shù)了所以才解決了函數(shù)重復(fù)定義的問(wèn)題?
像Test類中的test1那樣寫的話,默認(rèn)是不是就是內(nèi)聯(lián)的?不管test1的代碼塊有多大都是內(nèi)聯(lián)的么?回復(fù) 2# Ox155


   

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2013-09-23 17:03 |只看該作者
對(duì)于代碼(函數(shù))不含有循環(huán)語(yǔ)句或者是代碼行數(shù)只有幾行的,都默認(rèn)是內(nèi)聯(lián) 。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2013-09-23 17:09 |只看該作者
Test的test1函數(shù),不報(bào)重復(fù)定義是什么原因?
回復(fù) 4# Ox155


   

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2013-09-23 17:11 |只看該作者
你有沒發(fā)現(xiàn),你的test1和其它兩個(gè)函數(shù)不一樣。
test1的實(shí)現(xiàn)在類里面,test2,test3在類外。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2013-09-23 17:17 |只看該作者
在類里面定義就不算重復(fù)定義了? 回復(fù) 6# Ox155


   

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2013-09-23 17:21 |只看該作者
哎喲,你自己試試不就知道了!
還有  這是基礎(chǔ)知識(shí)

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2013-09-23 17:23 |只看該作者
恩,正在學(xué)c++的基礎(chǔ)東西,謝謝了~
回復(fù) 8# Ox155


   

論壇徽章:
17
處女座
日期:2013-08-27 09:59:352015亞冠之柏太陽(yáng)神
日期:2015-07-30 10:16:402015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-07-29 18:58:182015年亞洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥豬
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56雙子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
10 [報(bào)告]
發(fā)表于 2013-09-24 11:45 |只看該作者
回復(fù) 9# yuanzhifei89


    C++有一次定義原則(ODR):翻譯單元包含的任何變量,函數(shù),類,枚舉或模板定義不可以多于一次(頭文件被不同的實(shí)現(xiàn)文件包含了幾次那么在頭文件中定義任何內(nèi)容就會(huì)有幾次定義出現(xiàn))。
任何程序只能精確的含有任何非inline函數(shù)一次定義。一個(gè)在類內(nèi)定義的函數(shù)默認(rèn)是inline的。在調(diào)用inline函數(shù)地方直接進(jìn)行代碼替換不存在使用函數(shù)符號(hào)的跳轉(zhuǎn)。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP