今天在borland新聞組上看到這個問題,因為uion的所有成員都共享同樣的記憶體,所以union中不能帶有建構函式的物件。如下這個union:
union ;
這三個物件都是帶有建構函式的,如果這三個物件都呼叫各自的建構函式,它們將互相干擾對方的資料。
原貼作者定義了三個結構和乙個聯合來表示不同的訊息:
typedef struct
tstr_blocked_item, *p_tstr_blocked_item;
typedef struct
tstr_basic_event, *p_tstr_basic_event;
typedef struct
tstr_broadcase_event, *p_tstr_broadcase_event;
typedef struct
;} tstr_event_data; //用乙個union表示三個不同的訊息
編譯器抱怨uion中不包含帶有建構函式的物件。
後來jason cipriani回貼,給了兩種解決方案:
(1):用乙個結構體表示所有的訊息
enum eventtype ;
struct tstr_event_data ;
void writeeventtofile (const tstr_event_data *data)
}(2)用類繼承來表示不同的訊息
struct tstr_event_data ;
struct tstr_blocked_item : public tstr_event_data
};struct tstr_basic_event : public tstr_event_data
};struct tstr_broadcase_event : public tstr_event_data
};void writealleventstofile (const vector&events)
整數類 包含拷貝建構函式
描述 定義乙個整數類,該類有乙個int型別的資料成員,該類支援整數的加,減,乘 除運算 整數類的4個操作,即整數類的成員函式 除此之外,定義建構函式和拷貝建構函式。編寫主函式進行測試 輸入乙個整數 輸出呼叫拷貝建構函式生成乙個新物件。新物件的值是原來物件的3倍。計算並輸出這兩個物件和差 乘積樣例輸入...
建構函式可以為虛函式嗎?
答案當然是否定的,主要從一下兩個角度加以說明。從儲存空間角度 虛函式對應乙個vtable,可是這個vtable其實是儲存在物件的記憶體空間的。那麼問題來了,如果建構函式是虛函式,就要通過vtable來呼叫,可是物件空間還沒有例項化,也就是記憶體空間還沒有,無法找到vtable,所以建構函式不能是虛函...
union中的成員不能有建構函式
最近在做專案的cta測試,快被折騰死了。專案中用到的開源庫alljoyn在編譯時報錯 in file included from target base alljoyn inc alljoyn message.h 36 0 from target base alljoyn inc alljoyn a...