vectorのコンパイルエラー

解決


ぺぺ  2005-12-16 21:23:50  No: 59955

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 22:56:46  No: 59956

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


ぺぺ  2005-12-16 23:09:44  No: 59957

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


tetrapod  2005-12-16 23:58:48  No: 59958

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

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

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


ぺぺ  2005-12-17 00:29:54  No: 59959

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

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

ありがとうございます。


マルチポスト  2005-12-17 00:52:18  No: 59960

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加