VC++6.0の環境で以下のようなうプログラムをしましたところ
コンパイルしたところ、エラーとなります。
vectorのpush.back()でコンパイルエラーとなっているようなのですが、
原因がわかりません。
************************エラーメッセージ**********************
(1)二項演算子 '=' : 型 'const class A' の右オペランドを扱う演算子は定義されていません。
(2)class 'A' : コピー コンストラクタが定義されていません。
すいませんが、どなたかご教授いただきたく。お願いいたします。
-------------------------------------------------------------
#include<stdio.h>
#include<vector>
#include<string>
using namespace std;
class B{
private:
string b;
public:
B(){};
B(B &inObj){
b = inObj.b;
};
B& operator=(B& inObj){
b = inObj.b;
return *this;
}
};
class A:public B{
private:
string a;
public:
A(){};
A(A& inObj){
a = inObj.a;
return;
};
A& operator=(A& inObj){
a = inObj.a;
return *this;
}
};
int main(){
vector<A> tests;
A t1;
tests.push_back(t1); //←コンパイルエラー
return 0;
}
http://www.vcppclub.com/bbs1/wforum.cgi?mode=allread&no=2804&page=0
マルチポスト→マナー違反→まともな回答もらえない
早急に回答がほしかったので、つい先走りました。
すいません。
エラーメッセージの示すとおりです。
A::A(A&) は vector の期待しているコピーコンストラクタではなく
A& A::operator=(A&) は vector の期待している代入演算子ではありません。
const をつけてください。
どこにつけたらいいかはご自分で考えてください。
# A のクラス定義はバグっている、と思う。
tetrapodさん、ご回答ありがとうございます。
tetrapodさんのおっしゃるとおりです。
constをつけて、再度コンパイル行いましたが
正常に終わりました。
ありがとうございます。
> http://www.vcppclub.com/bbs1/wforum.cgi?mode=allread&no=2804&page=0
放置するなよ!
だから、マルチポストするヤツは嫌われんだよ。
ツイート | ![]() |