C 程式設計出現的問題

2021-07-14 13:02:33 字數 4244 閱讀 2146

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...