自定義class 與vector

代碼:

#include <stdio.h>
#include <vector>


using namespace std;


class MyClass{
public:
	MyClass(){
		printf("call constructor\n");
	};
	MyClass(MyClass &b){
		printf("call copy constructor\n");
	};
};


int main(){
	vector<MyClass> vec;
	MyClass a;
	vec.push_back(a);
	return 0;	
}




是通不過編譯的,error C2558: class“MyClass”: 沒有可用的複製構造函數或複製構造函數聲明爲“explicit”
原來是拷貝構造函數前必須加上const........(沒有搞懂爲什麼)

後來又遇到一個奇葩的問題:


/*
 * test.cpp
 *
 *  Created on: 2014-1-17
 *      Author: zhijian
 */




#include <stdio.h>
#include <vector>


using namespace std;


class MyClass{
public:
	MyClass(){
		printf("call constructor\n");
	};
	MyClass(const MyClass &b){
		printf("call copy constructor\n");
	};
	MyClass &operator=(MyClass &b){
		printf("call operator = \n");
		return *this;
	}
};


int main(){
	vector<MyClass> vec;
	MyClass a;
	vec.push_back(a);
	return 0;
}



也要報錯: error C2679: 二進制“=”: 沒有找到接受“const MyClass”類型的右操作數的運算符(或沒有可接受的轉換)
發現也是operator(Myclass &b)少加了const
但是這段代碼放在mingw下編譯卻能通過.........

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章