精華區beta C_and_CPP 關於我們 聯絡資訊
不好意思,我是程式新手,最近寫BCB時遇到一些問題 我想問一下我寫的地方那裡有不對,程式碼如下 struct midterm{ String name; int score; }; struct midterm test[2]={{"王大頭",90},{"陳小明",85}}; //這裡不知出了什麼問題 在編譯時一直出現錯誤訊息,麻煩高手告訴我該如何修正,謝謝!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.63.120.154
cppguide:是string s要小寫 還有要#include<string.h> 09/20 23:56
UNARYvvv:String 沒錯,在 BCB 那代表 AnsiString 別名 09/21 00:08
UNARYvvv:還有 string.h 是 C 的字串函式組吧 09/21 00:08
ie875141:應該是String,且不用string.h因為我之前有用過String 09/21 00:10
UNARYvvv:樓上沒錯 09/21 00:12
ie875141:都不須string.h,請幫忙看一下還有那有錯,謝謝上面兩位 09/21 00:11
> -------------------------------------------------------------------------- < 作者: UNARYvvv (有趣生活) 看板: C_and_CPP 標題: Re: [問題]BCB中結構變數初值設定的問題 時間: Wed Sep 21 00:14:18 2005 ※ 引述《ie875141 (ㄚ信￾ )》之銘言: : 不好意思,我是程式新手,最近寫BCB時遇到一些問題 : 我想問一下我寫的地方那裡有不對,程式碼如下 : struct midterm{ : String name; : int score; : }; : struct midterm test[2]={{"王大頭",90},{"陳小明",85}}; //這裡不知出了什麼問題 : 在編譯時一直出現錯誤訊息,麻煩高手告訴我該如何修正,謝謝!!! struct midterm{ String name; int score; midterm(String n,int s) : name(n),score(s) {} }; struct midterm test[2]={ midterm("王大頭",90), midterm("陳小明",85) }; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.70.137.117 > -------------------------------------------------------------------------- < 作者: cppguide (洗屁屁) 看板: C_and_CPP 標題: Re: [問題]BCB中結構變數初值設定的問題 時間: Wed Sep 21 00:24:54 2005 ※ 引述《ie875141 (ㄚ信￾ )》之銘言: : 不好意思,我是程式新手,最近寫BCB時遇到一些問題 : 我想問一下我寫的地方那裡有不對,程式碼如下 : struct midterm{ : String name; : int score; : }; : struct midterm test[2]={{"王大頭",90},{"陳小明",85}}; //這裡不知出了什麼問題 : 在編譯時一直出現錯誤訊息,麻煩高手告訴我該如何修正,謝謝!!! 他的code 我用Dev C++ compile時 只要把String name; 改成string name即可以compile成功呀 而c++primer 也是用string 呀!!!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.140.179.144
UNARYvvv:這樣子當然是沒有錯。只是原 po 使用 BCB 它宣告 String 09/21 00:33
UNARYvvv:並不是打錯型態或是少了 include 而造成的錯誤囉.. 09/21 00:33
UNARYvvv:而且 C++ Primer 也是用 #include <string> 09/21 00:35
UNARYvvv:string.h 包含是一些 C 的字串處理函式 09/21 00:36
> -------------------------------------------------------------------------- < 作者: ie875141 (ㄚ信￾ ) 看板: C_and_CPP 標題: Re: [問題]BCB中結構變數初值設定的問題 時間: Wed Sep 21 00:45:42 2005 ※ 引述《UNARYvvv (有趣生活)》之銘言: : ※ 引述《ie875141 (ㄚ信￾ )》之銘言: : : 不好意思,我是程式新手,最近寫BCB時遇到一些問題 : : 我想問一下我寫的地方那裡有不對,程式碼如下 : : struct midterm{ : : String name; : : int score; : : }; : : struct midterm test[2]={{"王大頭",90},{"陳小明",85}}; //這裡不知出了什麼問題 : : 在編譯時一直出現錯誤訊息,麻煩高手告訴我該如何修正,謝謝!!! : struct midterm{ : String name; : int score; : midterm(String n,int s) : name(n),score(s) {} : }; : struct midterm test[2]={ : midterm("王大頭",90), : midterm("陳小明",85) : }; 照這樣打就可以了,謝謝!! 不過我想請問你加的那兩行是什麼意思 另外,我有另一個結構中,兩個都是int初值設定就不需那兩行如下 struct pos{ int x; int y; }; struct pos set[2]={{100,200},{400,500}}; 如上的code就可設定初值,這是為什麼??? 難道如果結構中型態不同,設定初值的方法就必需加上你所寫的那行嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.63.120.154
khoguan:我也感到好奇.請原po貼一下原先的編譯錯誤訊息 09/21 00:56
UNARYvvv:我貼了 09/21 01:02
> -------------------------------------------------------------------------- < 作者: UNARYvvv (有趣生活) 看板: C_and_CPP 標題: Re: [問題]BCB中結構變數初值設定的問題 時間: Wed Sep 21 01:02:13 2005 ※ 引述《cppguide (洗屁屁)》之銘言: : ※ 引述《ie875141 (ㄚ信￾ )》之銘言: : : 不好意思,我是程式新手,最近寫BCB時遇到一些問題 : : 我想問一下我寫的地方那裡有不對,程式碼如下 : : struct midterm{ : : String name; : : int score; : : }; : : struct midterm test[2]={{"王大頭",90},{"陳小明",85}}; //這裡不知出了什麼問題 : : 在編譯時一直出現錯誤訊息,麻煩高手告訴我該如何修正,謝謝!!! : 他的code 我用Dev C++ compile時 : 只要把String name; 改成string name即可以compile成功呀 : 而c++primer 也是用string 呀!!!!! 我剛才也測了一下 也是把 String 改成 string (另外加上 #include <string>) 沒錯 Dev-Cpp 可正常編譯通過 但是我把改過的 code 再剪貼回 BCB 編譯 居然還是跟原 po 一開始一樣的錯誤 編譯器說 "Connot convert 'char *' to midterm" 我也覺得莫名奇妙 這我就不知道為什麼了.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.70.137.117
ie875141:雖然不知道為什麼,不過還是謝謝你!!! 09/21 01:09
PiscesGold:因為midterm的構造器的問題 它只是「淺拷貝」 需要重載 09/21 01:08
PiscesGold:構造器才行 這個屬于C++基礎知識 建議先溫習一下C++ 09/21 01:10
LPH66:構造器應該是指constructor吧? 09/21 01:12
PiscesGold:對的,我不知道台灣這邊的說法 :) 09/21 01:13
UNARYvvv:印象中有看過翻譯成「建構子」的說法 09/21 02:39
> -------------------------------------------------------------------------- < 作者: UNARYvvv (有趣生活) 看板: C_and_CPP 標題: Re: [問題]BCB中結構變數初值設定的問題 時間: Wed Sep 21 02:36:35 2005
PiscesGold:因為midterm的構造器的問題 它只是「淺拷貝」 需要重載
PiscesGold:構造器才行 這個屬于C++基礎知識 建議先溫習一下C++
應該不是那個問題喔. . . 關於這項 "C++ 基礎知識" 我有從 C++03 revisions 文件中找到一些相關資料 網路上可以找到,建議可以有空查查 摘錄自 12.6.1, paragraph 2: class X { public: int i; float f; complex c; } x = { 99, 88.8, 77.7 }; Here, x.i is initialized with 99, x.f is initialized with 88.8, and complex::complex(double) is called for the initialization of x.c. 以原 po 的狀況來說 由於 String class 有 overload 針對 const char * 的版本 也就是說有提供 String::String(const char*) 所以,以 { } 形式初始化的時候,應該會自動呼叫該版本 讓型態為 String 的 data member 順利設定它自己的初值。 無論如何,編譯器會發出無法把 char* 轉成 midterm 這項訊息 真的是滿詭異的,因為我並沒有嘗試那樣做。 另外我提供一個測試結果 以下程式碼: ---------------------- class SS { char msg[128]; public: SS(const char *s){ strcpy(msg,s); } }; struct midterm{ SS name; int score; }; struct midterm test[2] = {{"王大頭",90}, {"陳小明",85}}; struct midterm m0 = {"123",0}; ------------------------------ 在 VC6 , BCB6 上面編譯都會有一樣錯誤訊息 而在 gcc 3.4 , VC.NET 2003 則完全順利通過編譯。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.70.137.117 ※ 編輯: UNARYvvv 來自: 61.70.137.117 (09/21 02:38) > -------------------------------------------------------------------------- < 作者: khoguan (Khoguan Phuann) 看板: C_and_CPP 標題: Re: [問題]BCB中結構變數初值設定的問題 時間: Wed Sep 21 02:56:56 2005 ※ 引述《UNARYvvv (有趣生活)》之銘言: : 我剛才也測了一下 : 也是把 String 改成 string (另外加上 #include <string>) : 沒錯 Dev-Cpp 可正常編譯通過 : 但是我把改過的 code 再剪貼回 BCB 編譯 : 居然還是跟原 po 一開始一樣的錯誤 : 編譯器說 "Connot convert 'char *' to midterm" : 我也覺得莫名奇妙 : 這我就不知道為什麼了.. 應該是 bcc32 的 bug. 這裡有一些討論 http://groups.google.com/group/borland.public.cppbuilder.language.cpp/ browse_frm/thread/571bb01b89a4078b/9d409e219bb8c38e? lnk=st&q=bcc32+struct+initialization&rnum=7&hl=en#9d409e219bb8c38e 縮址 http://myurl.com.tw/geh2 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.208.168 > -------------------------------------------------------------------------- < 作者: PiscesGold (黃金雙魚宮) 看板: C_and_CPP 標題: Re: [問題]BCB中結構變數初值設定的問題 時間: Wed Sep 21 03:22:45 2005 上面的討論說在 VC++ 上可以很好的 run 起來 不過 UNARYvvv 經過實踐證實 VC++ 也會報錯 我現在也沒有裝有 VC++ 所以也不能測試 ※ 引述《khoguan (Khoguan Phuann)》之銘言: : ※ 引述《UNARYvvv (有趣生活)》之銘言: : : 我剛才也測了一下 : : 也是把 String 改成 string (另外加上 #include <string>) : : 沒錯 Dev-Cpp 可正常編譯通過 : : 但是我把改過的 code 再剪貼回 BCB 編譯 : : 居然還是跟原 po 一開始一樣的錯誤 : : 編譯器說 "Connot convert 'char *' to midterm" : : 我也覺得莫名奇妙 : : 這我就不知道為什麼了.. : 應該是 bcc32 的 bug. 這裡有一些討論 : http://groups.google.com/group/borland.public.cppbuilder.language.cpp/ : browse_frm/thread/571bb01b89a4078b/9d409e219bb8c38e? : lnk=st&q=bcc32+struct+initialization&rnum=7&hl=en#9d409e219bb8c38e : 縮址 : http://myurl.com.tw/geh2 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 221.232.78.139
UNARYvvv:VC6 + SP6 會錯;不過改用 VC.NET 即可順利通過 09/21 09:35