推 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