2008/12/26

[C++] Multiple include

#ifndef A_HPP_
#define A_HPP_
#include "B.hpp"

class A
{
public:
//B* bpt;
A();
virtual ~A();
private:
B* bpt;
};
#endif /*A_HPP_*/
=========================================
#include "A.hpp"
#include "B.hpp"
A::A()
{
}

A::~A()
{
}
========================================
#ifndef B_HPP_
#define B_HPP_
#include "A.hpp"

class B
{
public:
//A* apt;
B();
virtual ~B();
private:
A* apt;
};
#endif /*B_HPP_*/
=======================================
#include "B.hpp"
#include "A.hpp"
B::B()
{
}

B::~B()
{
}


即使寫了,#ifnde,#define,#ifndef也無法解決Multiple Inclusions的問題?錯誤資訊如下:
error: ISO C++ forbids declaration of ‘A’ with no type

error: expected ‘;’ before ‘*’
真是非常的奇怪,不過只要使用pre-declare(forward declar)就可以了(如下)。有誰可以告訴我為什麼嗎?

#ifndef B_HPP_
#define B_HPP_
class A;
#include "A.hpp"
class B
{
public:
B();
virtual ~B();
private:
A* apt;
};
#endif /*B_HPP_*/


相關文章:千萬別把function definition & 變數definition寫入.h裡

2008/12/21

你願意用多少錢買"二十元美鈔"?

cited from Sway:The Irresistible Pull of Irrational Behavior

麥克斯‧貝瑟曼(Max Baserman)教授在哈佛商學院開了一門談判課程,課程一開始他都會舉辦一場「二十美元拍賣會」。正是由於這兩股力量的加乘效果,他的學生每年都很難完整保住自己的荷包。有一句俗話說,要從嬰兒手中拿走糖果並不困難,貝瑟曼教授則發現,要從哈佛MBA手中騙走鈔票,也不是什麼難事。

上課第一天,貝瑟曼教授宣布了一個看似簡單的遊戲。他手中揮舞著一張二十元美鈔,說要拿出來拍賣。

每個人都可以參加這項拍賣會,而且拍賣只有兩項規則。第一項規則是,每次出價只能增加一塊錢美金。第二項規則卻有點蹊蹺──最後的贏家可以贏得這張二十元鈔票,但是,出第二高價的人也得付出自己提的標價,但卻得不到任何東西。也就是說,在這個遊戲中,第二名將是最大的輸家。

拍賣一開始,大家都想輕鬆地用低價標得這張二十元美鈔,因此,很多人開始喊價,拍賣會正式開始進行。另一波出價高潮緊接而來。貝瑟曼說:「每次拍賣會的過程都差不多。一開始都有很多人搶標,競爭激烈。但當標價升高到十二美元至十六美元時,氣氛就開始改變了。」

這個時候,每個參加競標的人都發現,自己不是唯一打著如意算盤、想用低價標到那張二十元美鈔的人。忽然,教室中好像出現一陣集體消化不良。那種感覺就好像刮颱風時,大家突然發現家中水位正不斷升高時一樣。學生間開始出現一陣唏唏唆唆的聲音。貝瑟曼教授說:「除了那兩位喊價最高的學生之外,其他人忽然立刻退出了競標行列。」

在不自覺的情形下,那兩位喊價最高的學生顯然受困了。貝瑟曼說:「一個叫價十六美元,一個十七美元。叫價十六美元的人不是得再喊價到十八塊,就是得吞下十六塊美金的損失。」在此之前,每個學生都是存著想賺意外之財的心態,現在,剩下的這兩個人都不想當花錢卻得不到任何東西的傻瓜。這時,這兩位競標者掉進了和足球教練們相同的陷阱。「承諾心態」將使他們進入「只求不輸」的遊戲中。

拍賣會就像啟動了的火車,完全停不下來。競標價躍過十八美元、十九美元,終於到了二十元。價錢愈喊愈高時,其他學生簡直不敢繼續看下去。「當然」,貝瑟曼回憶道:「當喊價超過二十美元時,全班立刻爆出一陣夾雜著笑聲的驚叫。」

從理性的角度來看,這兩位競價者最應該做的決定當然是接受現有損失,在情況完全失控前停止喊價。但說來容易做來難。這兩位學生被拍賣的動力以及只要一喊停就得認賠的巨大的潛在損失及「承諾心態」硬拖著往前走,而損失則隨著每次喊價而愈滾愈大。這兩股力量正在交相作用:「承諾心態」讓他們選擇繼續喊價;但叫價愈來愈高,「迴避損失」的作用力卻又更被強化了。

競標者繼續喊價:二十一塊、二十二塊、二十三塊…… 五十塊、一百塊……,最後來到破紀錄的二○四塊美金。貝瑟曼進行這項實驗多年以來,從沒輸過一毛錢(所有拍賣賺來的錢都進了慈善機構)。不管參與競標的人是誰,不管是大學生或是企業主管,每個人都難逃「思維力」的影響。

2024年React state management趨勢

輕量化 在過去Redux 是 React 狀態管理的首選函式庫。 Redux 提供了強大的功能和靈活性,但也帶來了一定的學習成本和複雜度。 隨著 React 生態的不斷發展,越來越多的開發者開始追求輕量化的狀態管理函式庫。 Zustand 和 Recoil 等庫以其簡單易用、性...