vectorのコンパイルエラー

解決


ぺぺ  2005-12-16 12:23:50  No: 59955  IP: [192.*.*.*]

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;
}

編集 削除
マルチポスト  2005-12-16 13:56:46  No: 59956  IP: [192.*.*.*]

http://www.vcppclub.com/bbs1/wforum.cgi?mode=allread&no=2804&page=0
マルチポスト→マナー違反→まともな回答もらえない

編集 削除
ぺぺ  2005-12-16 14:09:44  No: 59957  IP: [192.*.*.*]

早急に回答がほしかったので、つい先走りました。
すいません。

編集 削除
tetrapod  2005-12-16 14:58:48  No: 59958  IP: [192.*.*.*]

エラーメッセージの示すとおりです。
A::A(A&) は vector の期待しているコピーコンストラクタではなく
A& A::operator=(A&) は vector の期待している代入演算子ではありません。

const をつけてください。
どこにつけたらいいかはご自分で考えてください。

# A のクラス定義はバグっている、と思う。

編集 削除
ぺぺ  2005-12-16 15:29:54  No: 59959  IP: [192.*.*.*]

tetrapodさん、ご回答ありがとうございます。
tetrapodさんのおっしゃるとおりです。

constをつけて、再度コンパイル行いましたが
正常に終わりました。

ありがとうございます。

編集 削除
マルチポスト  2005-12-16 15:52:18  No: 59960  IP: [192.*.*.*]

http://www.vcppclub.com/bbs1/wforum.cgi?mode=allread&no=2804&page=0
放置するなよ!

だから、マルチポストするヤツは嫌われんだよ。

編集 削除