1. 程式人生 > >關於VC編譯器錯誤 Error C2558

關於VC編譯器錯誤 Error C2558

我今天往一個類A裡面塞了一個另外一個類B作為成員變數,然後就報錯了。

類A的虛擬碼如下: class A
{
public:
    A()
{}
    
virtual~A(){;}

private:
    B b;
}
;
類B的虛擬碼如下:
class B
{
public:
B()
{}
virtual~B(){;}

private:
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對模板的錯誤下了一番功夫的。由此可見,效果還是非常明顯的。

posted on 2011-09-12 12:32 楊粼波 閱讀(1087) 評論(0)  編輯 收藏 引用 所屬分類: 原創文章C++