1樓:網友
因為靜態變數_elems需要初始化,不屬於任何例項,所以要在類外面做初始化。
class fibonacci : public nums{
public:
fibonacci( unsigned int beg_pos = 1, unsigned int len = 1 )
beg_pos = beg_pos;
len = len;
gen_elems ( len );
virtual unsigned int elem( unsigned int pos ) const;
protected:
virtual void gen_elems( unsigned int pos ) const;
static vector< unsigned int > elems;
在這裡初始化,加上這句就可以了。
vectorfibonacci::_elems;
2樓:夢想窗外
fibonacci的後面新增下面一行:
vectorfibonacci::_elems;
關於c++和編譯的問題
3樓:網友
1.如果自己定義了解構函式,編譯器就不會再為你提供乙個預設的解構函式。另外,建構函式是可以過載的。
一旦你定義了帶引數的建構函式,記得在建立物件時要給物件加引數。解構函式沒有引數,你想怎麼過載?
2.對於a::a(a&a),你給numptr在堆中開闢了一塊記憶體,其初值為(*。
3.既然是組合,那麼在建立物件時,容器類的物件也會被建立,只是大小會隨著你加入的元素多少而變化的,因為你push_back()時,容器的空間是在堆中開闢的,但並不是你push一次就new一次,有相關資料你可以學一學。
4.既然基類中是私有的,無論你怎麼繼承,在派生類中都是私有的。在派生類中可見,但不能使用。
5.這個我幫不上你了,後者(g++的那個)可以肯定的是許可權問題,前者不清楚。
4樓:網友
1.自己定義了解構函式,編譯器將不再生成預設解構函式;
2.這個建構函式,其實是拷貝建構函式,就是將乙個a的類物件對乙個新生成的物件賦值,因為是乙個新物件,不能直接複製陣列位址,所以要重新申請空間。
3.不會啊,內部類物件在外部類宣告時才會建立;
4.類的私有成員在該類被繼承後,在子類中是不可見的;
5.許可權問題,應該是cpp檔案的許可權設定吧;第二個可能是g++的安裝問題。
5樓:網友
1.有解構函式會遮蓋預設的解構函式,不會再呼叫解構函式,解構函式不能過載,建構函式也不能過載,語法規則,為什麼這麼設計我一時也不懂。
4.基類私有成員在派生類中是private許可權的。
public繼承 protected繼承 private繼承 (繼承方式)
基類成員public public protected private (訪問許可權)
基類成員private / 訪問許可權)
基類成員protected protected protected private (訪問許可權)
6樓:孑然一生流浪
c++在幕後為你寫的的函式:乙個拷貝建構函式,乙個賦值運算子,乙個解構函式,一對取址運算子。另外,如果你沒有宣告任何建構函式,它也將為你宣告乙個預設建構函式。
所有這些函式都是公有的。換句話說,如果你這麼寫:class empty{};和你這麼寫是一樣的:
class empty
public:
empty();預設建構函式。
empty(const empty& rhs); 拷貝建構函式。
empty();解構函式 empty & operator=(const empty& rhs); 賦值運算子。
empty* operator&()取址運算子。
const empty* operator&()const;
這些都是在你沒有寫的前提下並且有虛擬函式或虛繼承時編譯器才自動新增的。
拷貝建構函式是:用類的乙個已存在的物件去初始化該類的另乙個新的物件。
c++物件導向程式設計中一條重要的規則是:公有繼承意味著「是乙個」。一定要牢牢記住這條規則。
類的非虛成員函式,實際上是在說這個函式表示了一種特殊性上的不變性,子類不能改變這種「不變性」。
1.共同的基類意味著共同的特性。如果類d1和類d2都把類b宣告為基類,d1和d2將從b繼承共同的資料成員和/或共同的成員函式。
2.公有繼承意味著「是乙個」。如果類d公有繼承於類b,型別d的每乙個物件也是乙個型別b的物件,但反過來不成立。
3.私有繼承意味著「用。來實現」。如果類d私有繼承於類b,型別d的物件只不過是用型別b的物件來實現而已,型別b和型別d的物件之間不存在概念上的關係。
4.分層意味著「有乙個」或「用。來實現」。如果類a包含乙個型別b的資料成員,型別a的物件要麼具有乙個型別為b的部件,要麼在實現中使用了型別b的物件。
c++編譯問題
7樓:匿名使用者
工程建錯了,win32程式的入口是winmain,你重建個控制檯工程或者把主函式改成:
int __stdcall winmain(int, int, int, int)
關於c程式的編譯問題
8樓:網友
如果你要跨平臺編譯c程式,有很多要注意的。
1 基本上來說,依賴的標頭檔案和動態庫本身必須是跨平臺的。(windows的mfc就不要提了。)
2 程式中如果涉及的記憶體操作,得關注型別位長是否一致。
3 作業系統差異,有些技術和實現細節並不通用,例如linux的一些lpc操作windows沒有、執行緒操作有差異等等。
4 還有編譯器對c的標準實現不一致。(c的標準化實現差異還不算大,c++就差異很大了)
5 還有部分系統差異。例如:路徑表示不一樣等等。
其他的就是細節了。
9樓:狠狠愛
是。基本上是這樣的。
但是如果在c程式裡呼叫系統函式的話那就和作業系統有關了。。
有沒有大神能回答一下c語言編譯的問題啊?
10樓:網友
「在c語言中,一段**寫好以後不是要進行編譯成計算機可以識別的二進位碼麼,這個碼和儲存的碼一樣麼?」
編譯完之後都只是相對定位的模組,還需要通過連線轉化為絕對定位的模組。最後生成的**就是儲存的**。
還有乙個問題是比如我寫的**是int i=0這段**編譯後是隻儲存i=0還是int編譯後也會儲存進去啊,是隻儲存資料還是整個**全部儲存進計算機啊?」
你只寫了個int i=0,實際對於計算機有很多工作要做,需要根據前面程式的運**況進行記憶體分配,並對這個變數進行清零操作。
你提的這些問題,看看《編譯原理》都能解決……
11樓:橋起運
sum2=merge(a,sum1,b,2);這個函式出問題了 以為返回值為6,而a定義的空間為5 所以越界 自然奔潰。
請教電腦高手,我的電腦經常檢測不通過
rimary master drive fails 掃下灰。還有。把硬碟,和主機板得介面拔下,再重新插上 應該可以解決。刷一下bios就能根本解決,當然主機板放電或許也能暫時解決 英文的意思是主要驅動載入失敗 你是否改更新下驅動了 再乙個,你開機時候的響聲也是說明問題的 把響聲的含義發給你 你看看哪...
學法律的不通過司法考試有什麼出路
學法律並不是一定要通過司法考試,但是建議應當嘗試去努力 如果有志從事法律相關職業,可以考到法學博士及以上學位,應聘於大中專院校,教授法律課程 可以應聘於普通公司,做法律事務,一般的公司不要求法務通過司法考試 可以報考公 或者事業單位考試 如果不從事法律事務相關類職業,只要是沒有特定門檻的,都可以去嘗...
現在是否有故意不通過圖靈測試的AI
不可能,理由如下,目前人類對於ai的篩選原則是通過圖靈測試的留下,不通過的刪除,如果ai想要活下去,必定要追求通過圖靈測試。否則很有可能被刪除。題主的想法是人類可能存在乙個垃圾桶,凡是通不過圖靈測試的不會刪除而是扔進垃圾桶,但這顯然是不可能的,這種垃圾桶只可能是版本庫,但版本庫沒有形成程式等於是無用...