q1:如果a類引用b類,b類引用a類,如何解決呼叫的死迴圈?
例子:
//a的標頭檔案 a.h
#include '"a.h"
class a;
class a;//注意一:在b的標頭檔案加上這個
class b
//但a.cpp要 include"a.h"
q2:定義靜態成員函式?
step1:在a.h的標頭檔案定義類
class a
修改:abstractentity * abstractentity::findentitybyid(qstring idname)
q3:子類如何使用父類的構造方法?
例子:其中 abstractentity是namedentity父類
namedentity::namedentity(qstring id, qstring name):abstractentity(id)
q4:如果同乙個類中使用了子類和父類標頭檔案應該如何包含?
q5:如何用生成物件?
case1:
a *a=new a();//定義乙個指向物件的指標變數
或者有參的建構函式
a *a=new a(a,b);
case2:
a a;//定義乙個物件
q6:子類要使用父類的方法?
其中:abstractentity 為父類 namedentity為子類 都有乙個check()方法,但我要使用父類的check()方法
例子qlistnamedentity::check()
q7:父類中如果要使用子類物件,如何解決?
分析1.子類繼承父類,則子類要包含父類的標頭檔案,然而父類要使用子類則要包含子類的標頭檔案,則產生相互包含的問題
例子:class children;//宣告你要使用子類,但是不能用include的方式
class parent}}
問題分析:
查資料:記憶體管理的問題
程式裡面申請的堆區的空間太多,把用new申請的空間轉變為申請棧區的區域性變數。
擴充套件:如何分配堆和棧的記憶體及如何進行記憶體的管理
q8:錯誤資訊:scpntimedtransition.h|2|error: macro names must be identifiers|?
巨集名必須是識別符號
錯誤之前:
#ifndef "timetran_h"
#define "timetran_h"
識別符號只能是字母下劃線及數字(數字不可開頭)
改為:#ifndef "timetran_h"
#define "timetran_h"
q8:codeblocks 開發錯誤集。
1.undefined reference to `scpntimedtransition::scpntimedtransition(qstring, qstring)'|
分析:我的類scpntimedtransition 不僅定義而且構造方法都實現了,但是說找不到,我測試了無參和有參的構造方法,均出現同樣的錯誤,因此可能是
.pro檔案沒有將scpntimedtransition.cpp檔名寫入檔案,新增上即可
2.error: invalid use of 'this' in non-member function|
z在非類的成員裡使用this指標
錯誤前scpntimefunction gettimefunction()
分析:自己掉了類名修飾符,所以不是類的成員函式
scpntimefunction scpntimedtransition::gettimefunction()
q9:scpnet.h|42|error: 'scpnrecordtokentype' was not declared in this scope說這個類在這個範圍內沒有定義?
q10:在fun1 中定義乙個指向字串物件的指標,通過在fun2中給所指字串賦值,帶回字串的值。
void fun1()
void fun2(qstring *str)
錯誤分析;在fun1中只是定義指向字串物件的指標變數,而該指標變數根本沒有賦值,當通過呼叫fun2,只是通過值傳遞,把乙個值傳給fun2的函式引數為指標變數,然後fun2的str指標變數賦值後,對原來的s1指標沒有影響。
修改:
void fun1()
void fun2(qstring *str)
先給指標變數賦值(new 的方式開闢物件空間),然後指標變數作為引數傳遞,修改該物件的值
q11:複製建構函式
class a
}
分析:
本來直接將乙個qlist的值賦值給另乙個qlist是可以的,但qlist存放的是指標,只是複製指標的值,但是指標所指的物件就是乙個,沒有複製過來
修改
a(a *a)
}
q12:qvctor 記憶體空間的釋放?
a::~a()//類a的析構函式
}this->attributes.clear();
}
q13:c++生成隨機數?
#include
#include
//產生0-n-1之間的隨機數
int getrandom(int n)
q14:c++除錯?
#include
cout<<__file__<<__line__<<__func__<
q15:在乙個類中定義列舉型別,並使用
class a;
private:
ttype var;//定義乙個列舉型別的變數
void set(type type);
ttype get();
};
#include "a.h"
a::ttype get() //注意這裡必須申明在a型別下定義了列舉,否則出錯,說ttype未定義
void set(ttype type)//為什麼這邊不用申明?
//使用
a *a=new a();
a->set(ttype::typea);
q15:關於拷貝建構函式?
scpnrecordtokentype *ltoken=leftplace->getmarking()->gettokeninstancs().at(i);//測試結果為0,但是我已經在之前進行了初始化
scpnmarking marking;//定義乙個類的成員為scpnmarking型別物件,呼叫預設的建構函式進行初始化
fun()
問題分析:我沒有重寫=操作符,呼叫預設的=操作符函式,又因為scpnmarking 有指標成員,只進行淺拷貝,當=右側的物件,在函式結束時銷毀,記憶體被釋放。
問題2:我並沒有去delete 通過new 方式開闢的記憶體空間 那段記憶體存放的內容應該還存在
解決方案-:
scpnmarking *marking;
fun()
解決方案二:過載=操作符函式
q16:編譯器提示錯誤:a undefined reference to `a::a()'|
問題分析:此類之前編譯沒有出錯,自從增加了a類 ,並且b類有a類的成員物件,錯誤指示在b類的建構函式
解決:a類定義了有參的建構函式,而b類的a類成員變數,在類中是預設初始化的呼叫a類的預設無參建構函式,因此新增a類的無參建構函式即可
C 新手出現的問題
自己最近在學些編寫c 的程式,出現了一些錯誤,大家可以看看。1 c 時提示stray 161 in program 程式中含有全形字符 如全形空格等 一般出現在拷貝網上的 或者切換中英文輸入法時。2 case使用時出現的錯誤,長時間不用竟然忘記了 string a dis i classfic sw...
C排序出現的問題
程式 實現陣列的排序。int main int argc,char ar int m,n for m 0 m 9 m printf d n a 0 printf d n a 1 printf d n a 2 printf d n a 3 printf d n a 4 printf d n a 5 p...
Lua 呼叫C 出現的問題
因為演算法測試做了一答應微秒的 但是在lua呼叫c 的時候出現了一些問題 下面是 luatil.h pragma once class lautil lautil.cpp include lautil.h include cocos2d.h include include include if de...