dポイントプレゼントキャンペーン実施中!

C++のvectorについて教えてください。

現在悩んでいる問題について簡単に説明するために、テストコードを書きました。


#include <vector>

class IntType
{
private:
int num;
public:
IntType( int n ):num( n ){};
};

std::vector< IntType > IntVector;

void main()
{
}

このコードをDebug版でコンパイルすると

1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\xutility(285) : error C2784: 'bool std::operator <(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt2> &)' : テンプレート 引数を 'const std::reverse_iterator<_RanIt> &' に対して 'const size_t' から減少できませんでした
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\xutility(2236) : 'std::operator <' の宣言を確認してください。

のようなエラーが出ます。
しかし、Release版でコンパイルするとコンパイルは通ります。

Debug版でコンパイルを通すにはどのようなコードを追加すればよいでしょうか?
知恵を貸してください。
よろしくおねがいします。

/**
VisualStudio2008 AcademiEdition
*/

A 回答 (3件)

vectorに指定するクラスにはデフォルトコンストラクタが必要です。



class IntType
{
private:
 int num;
public:
 IntType(void):num(0) {};
 IntType( int n ):num( n ){};
};

とすると、おそらくコンパイルできるようになるはず。

多分そのコードだとReleaseでも通らないと思うんですけどね...
    • good
    • 0
この回答へのお礼

ありがとうございます。

VisualStudioを再インストールしたらコンパイルが通りました・・・
お騒がせしました><!

お礼日時:2010/02/28 13:55

main の返り値を void にするのはいかがなものかと思うな.


あと, この形ではデフォルトコンストラクタはいらないんじゃないかな>#1. 確かに一部の関数ではデフォルト引数としてデフォルトコンストラクタ (が作る値) を要求するけど, ここではそのような関数は使われていないので.
とはいえコンテナライブラリではコピーコンストラクタと代入演算子を要求するので, やっぱり駄目であることに変わりはない.
    • good
    • 0

他のところが影響しているのではないでしょうか。


拡張子が.cになっているとか。
VisualStudio2008 Express editionでは何の変更も加えずにDebug/Releaseともコンパイルが通ります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!