我今天往一個類A裡面塞了一個另外一個類B作為成員變量,然後就報錯了。
類A的僞代碼如下:
class A
{
public:
A(){}
virtual ~A(){;}
private:
B b;
};
類B的僞代碼如下:
class B
B(){}
virtual ~B(){;}
B(const B& b);
B& operator = (const B& b);
發現了什麼特别的沒有?
嗯,是的,B裡面做了防拷貝
錯誤是由于這樣一段代碼引發的:
typedef std::vector<A> AArray;
AArray arr;
A a;
arr.push_back(a);
我用的是VS2003,報錯卻報錯到vector這裡,很讓人摸不着頭腦。其實不是vector有問題,隻是說,push_back這個操作會做一個對象拷貝,而B是不允許拷貝的,是以觸發了錯誤。
我剛才試了下vs2010,錯誤就非常精确到位了。
錯誤 1 error C2248: “B::B”: 無法通路 private 成員(在“B”類中聲明) e:\project\testc2558\testc2558\testc2558.cpp 25
不知道vs2003之後vs2010之前的版本情況如何。反正,vs2010我是知道的,2010對模闆的錯誤下了一番功夫的。由此可見,效果還是非常明顯的。