C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: エラー C2248 が解決できません。


(過去ログ 96 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■57566 / inTopicNo.1)  エラー C2248 が解決できません。
  
□投稿者/ さいとう (1回)-(2011/03/04(Fri) 19:24:11)

分類:[C/C++] 

はじめまして。

Micrpspft Visual Studioでプログラムを組んでいるのですが、
c:\program files\microsoft visual studio 10.0\vc\include\sstream(724): error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : private メンバー (クラス 'std::basic_ios<_Elem,_Traits>' で宣言されている) にアクセスできません。
というエラーが出てコンパイルができません。
ソースコードのうち、
sList.push_back(temp);
eqSList[temp.energy] = temp;
という行を削除するとエラーも消えるので、この部分が原因となっているということは分かるのですが、何が問題なのか分かりません。
以下にソースコードの一部を貼ります。
class Structure
{
public:
	int num;
	vector<string> atom;
	vector<long double> xCoo,yCoo,zCoo;
	long double energy, barrierEnergy;

	Structure(){
	}

	bool push_back(string buf){//input atom and coordinate data from "string buf"
		ss.str(buf);
		ss >> tAtom >> tXCoo >> tYCoo >> tZCoo;
		if(tAtom.size() > 2){
			return 0;
		}else{
			atom.push_back(tAtom);
			xCoo.push_back(tXCoo);
			yCoo.push_back(tYCoo);
			zCoo.push_back(tZCoo);
			return 1;
		}
	}

private:
	string tAtom;
	long double tXCoo, tYCoo, tZCoo;
	stringstream ss;
};



int main()
{
	cout<<"ver 0.30 Programmed by Ryo Saito"<<endl; 
	cout<<"This program can process EQlist, MIN, SADDLE and IRC files."<<endl<<endl;
	
	//Check the file type.
	string eqList;
	string fileName;
	string buf;
	int fileType = -1;//0:EQlist 2:MIN 3:SADDLE 4:IRC
	cout<<"Is this file EQ list?(Y/N)"<<endl;
	cin>>eqList;
	if(eqList == "y" | eqList == "Y"){
		cout<<"Filename? (Without _EQ_list.log)"<<endl;
		cin>>fileName;
		fileName = "./" + fileName + "_EQ_list.log";
		fileType = 0;
	}else{
		cout<<"Filename? (Without .log)"<<endl;
		cin>>fileName;
		fileName = "./" + fileName + ".log";
		ifstream fileTypeCheck(fileName.c_str());
		for(int i = 0;i < 34;i++){
			getline(fileTypeCheck,buf);
		}
		getline(fileTypeCheck,buf);
		stringstream ssftc(buf);
		ssftc >> fileType;
	}

	//Get structures.
	stringstream ss1;
	string check, dump;
	Structure temp;
	map<long double, Structure> eqSList;
	vector<Structure> sList;
	ifstream getS(fileName.c_str());
	while( !getS.eof() ){
		getline(getS,buf);
		ss1.clear();
		ss1.str(buf);
		ss1 >> check;
		if(check == "#"){
			if(eqList == "y" | eqList == "Y"){
				ss1 >> dump>> dump>> dump>> temp.num;
			}else{
				ss1 >> dump>> temp.num;
			}
			getline(getS,buf);
			while(temp.push_back(buf)){
				getline(getS,buf);
			}
			while(check != "Energy" && check != "ENERGY"){
				getline(getS,buf);
				ss1.str(buf);
				ss1 >> check;
			}
			if(fileType == 0){
				ss1 >> dump >> temp.energy;
				check = temp.energy;
				if(check.size() >= 17){
					ss1 >> dump >> dump>> temp.barrierEnergy;
				}else{
					ss1 >> dump >> dump>> dump >> temp.barrierEnergy;
				}
				eqSList[temp.energy] = temp; //ここでエラーが出ます。
			}else if(fileType == 2,3,4){
				ss1 >> check;
				if(check == "="){
					ss1 >> temp.energy;
				}else{
					stringstream ssCheck(check);
					ssCheck >> temp.energy;
				}
				sList.push_back(temp); //ここでエラーが出ます。
			}

		}
	}
};

よろしくお願いします。

引用返信 編集キー/
■57567 / inTopicNo.2)  Re[1]: エラー C2248 が解決できません。
□投稿者/ επιστημη (2602回)-(2011/03/04(Fri) 19:48:29)
επιστημη さんの Web サイト
> class Structure
> {
> public:
> ...
> private:
> 	string tAtom;
> 	long double tXCoo, tYCoo, tZCoo;
> 	stringstream ss; // ****** ココ ***** /
> };

stringstreamはコピーできないんじゃない?

それが理由なら

> sList.push_back(temp);
> eqSList[temp.energy] = temp;
> という行を削除するとエラーも消えるので

の説明がつく。どっちもコピーを伴うから。

引用返信 編集キー/
■57579 / inTopicNo.3)  Re[2]: エラー C2248 が解決できません。
□投稿者/ さいとう (3回)-(2011/03/05(Sat) 14:34:56)
エラーの原因はご指摘のとおりでした。

コピーコンストラクタ、代入オペレータを定義し、stringstreamをコピーさせないようにしたところ、エラーはなくなりました。
iostreamはコピーできないんですね。

ありがとうございました。
解決済み
引用返信 編集キー/
■57584 / inTopicNo.4)  Re[3]: エラー C2248 が解決できません。
□投稿者/ 774RR (576回)-(2011/03/05(Sat) 18:48:56)
コピーしなくてすむ、ってことはそもそもメンバーにする必要すらなかった、ということ。
Structure::push_back の作業変数 (自動変数) にしない理由が何かあるの?
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -