お世話になります。
VC++6.0/XPで開発しております。
std::vectorのオブジェクトを、std::mapの値として
扱いたいのですが、コンパイルエラーが出ます。
struct sTest {
char * no;
int number;
};
typedef std::vector<sTest> VCT_;
typedef std::map<char *, VCT_> MAP_; VCT_PTN_VAL;
MAP_ error; ←この宣言でエラーが出ます。
上記typedefだけの場合は、コンパイルは通ります。
エラーの内容は、コンパイル内部エラーのようで
意味を理解できないほど大量に出ます。
何が悪いのか、お分かりになる方
いらっしゃいましたら、教えて頂けませんでしょうか。
宜しくお願い致します。
>エラーの内容は、コンパイル内部エラーのようで
>意味を理解できないほど大量に出ます。
本当にエラーですか?warningではないですか?
(VC6ではSTLをつかうと4786が仰山出る。)
ちょっとコピペしてコンパイルしてみたところ、
>typedef std::vector<sTest> VCT_;
に全角空白がある。
>typedef std::map<char *, VCT_> MAP_; VCT_PTN_VAL;
のVCT_PTN_VALが意味不明。
というエラーがでて、あとはwarning C4786ですね。
気になるならば、#pragmaをつかって表示(出力)しないようにするとか。
#pragma warning( disable : 4786 )
ちなみに、
>struct sTest {
> char * no;
> int number;
>};
>typedef std::map<char *, VCT_> MAP_; VCT_PTN_VAL;
char*型より、std::string 型の方が扱いやすいですけど、どうでしょうか?
>> Blue様
早速の回答、有難うございます。
おっしゃいますように、エラーではなく警告でした。
(あまりに大量のため、パニクってしまい、よく見ておりませんでした。申し訳ないです)
サンプルコードの意味不明箇所は、こちらの掲示板に質問する際に
書き換えた時、間違えてしまったようです。重ね重ね、ご指摘有難うございましす。
教えていただきました警告を制御するプリプロセッサ
#pragma warning( disable : 4786 )
ですが、どのあたりに記載すれば、宜しいのでしょうか。
ネットで調べましたところ、ファイルをインクルードする前に制御すべき、と書かれておりましたが
#include前に宣言しても、警告は以前のままです。
お手数ですが、ご存知でしたら、教えて頂けませんでしょうか。
宜しくお願い致します。
※std::string 初めて知りました。これから調べさせて頂きます。
>ネットで調べましたところ、ファイルをインクルードする前に制御すべき、と書かれておりましたが
>#include前に宣言しても、警告は以前のままです。
プロジェクトの種類は何でしょうか?
#include <vector>
#include <map>
を記述しているソースの上に書いても出ますか?
>> Blue様
またまた、回答下さいまして、有難うございます。
プロジェクトは、Win32 Applicationです。
#include <vector>
#include <map>
の位置を、様々なファイルのインクルード宣言のトップに記載し(以前は最終に追加)
その先頭に警告制御文を書くと、4786 警告は表示されなくなりました。
有難うございました。
※
し、しかし・・。
LNK2005のエラーが出ているようです。
しかしながら、これは別の原因が考えられますので、調べてみます。
本当に、ご親切に教えて頂きまして、有難うございました。
ツイート | ![]() |