STLのmapコンテナにて、
valueを取得したり、
keyとvalueを登録するソースを書いていました。

get(key)にあたって、
valの取得に失敗した際には、
mapコンテナ上のkey-valueデータと
同期されているMySQLより、
データを取得してきます。

MySQLよりkeyに対応するvalの取得が
完了したら、
そのkeyとvalをmapコンテナに
insertしたいと思っています。

つきまして、
insertを行おうと、
「_container.insert(std::make_pair(key, val));」の一文を
ソースに挿入したところ、
「型が違う!」という内容(?)のエラー文で
コンパイル時に怒られてしまいました。

ただ、「どの様に直してごらん!」と
エラー文が言っているのか、
今いち、意味を理解できないでいます。

このエラー情報的には、
どんな風の型の改善を求められているのでしょうか?
教えていただけるとありがたいです。

もし可能でしたら、pointBの
「_container.insert(std::make_pair(key, val));」の部分で、
MySQLから取得済みkeyとvalを、
pointAのkeyとvalに代入する方法も
教えていただけるとありがたいです。

どちらかでも、
アドバイスをいただけますとありがたいです。
どうぞ宜しくお願い致します。


--------------------------------------------------
template<typename KEY, typename VALUE>
class hoge : public service_object<ipl<KEY, VALUE>>

{
virtual void put(key_type key, value_type val) {
_container.insert(std::make_pair(key, val)); // pointA
}

virtual cc::fu<value_type> get(key_type key) {

typename container_type::iterator iterator = _container.find(key);

if (iterator != _container.end()) {
return cc::fu<value_type>((*iterator).second);

}else {

//getにした場合MySQLよりkeyとvalueを取得完了できるので取得した。

/* MySQLより取得したkeyとvalをpointAのようにmapコンテナにinsertしたい。*/
_container.insert(std::make_pair(key, val)); //pointB

 }
}

};

--------------------------------------------------


■エラー文
error: conversion from
std::pair<std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::shared_ptr<csx::basic_message_cons<csx::basic_message<void, char> > > > >, bool>’ to non-scalar type ‘csrpc::future<boost::shared_ptr<csx::basic_message_cons<csx::basic_message<void, char> > > >’ requested

このQ&Aに関連する最新のQ&A

A 回答 (1件)

・template の型引数である KEY や VALUE と key_type, value_type はどのような関係にあるのか


・_container の型は何か
・変数 val の型は何か
あたりがわからんと, なんとも答えようがない気がするなぁ.
あと, 何も考えずに std::make_pair を使うのではなく, 適切な型の中で定義されている value_type を使ってオブジェクトを作った方がよいと思う.
もちろん「value_type で問題ないなら std::make_pair でも問題ない」わけなんだけど, std::make_pair よりも value_type の方が問題がより明確になるはず.
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【このサイトについて】アプリ版で使っています。先日から「新着QA」をタップすると、私が登録したカテゴ

【このサイトについて】アプリ版で使っています。先日から「新着QA」をタップすると、私が登録したカテゴリーの新着QAしか表示されません。全ての新着QAを見るにはどうしたらよろしいでしょうか?ご回答のほど、よろしくお願いします。
m(_ _)m

Aベストアンサー

質問者さんの端末や状況などがよく分かりませんが、
iOS版の自分の携帯で試してみたところ、新着QAをタップすると問題なく新着QAが出てきますね。

不具合などの可能性とかもありますし、気になるようでしたら運営に問い合わせをしてみてはいかがでしょうか。

Qstd::cout << p と std::cout << *p の違

std::cout << p と std::cout << *p の違いは?

VC++でコードを書きながらC++を学んでいます。
ポインタで疑問に思ったことがあるので質問させて下さい。

int* p;
int n = 100;
p = &a;

上記のように変数を宣言・代入した場合、
std::cout << p と std::cout << *p のどちらでも"100"と表示されます。
これら二つの違いは何でしょうか?
本来*pとすべきところをpにしてもVC++が気を利かせて
&pのアドレスに入っているデータを表示してくれているということでしょうか?

Aベストアンサー

No.1氏の回答にあるコードを元に答えます。

>この場合&pでもアドレスが表示されると思うのですが、
>「&p」と「p」の違いは何でしょうか?
pはaのアドレス。
&pはpのアドレス。
(「p = &a」では、どこのアドレスを渡しているのか考えてみて下さい)


「&p」と「p」の違いというのが参照とポインタの違いを聞いているのだとしたら、constのポインタ==参照型で良かったと思います。
p = &a; //OK
&a = p; //error
int* const p2 = p;
p2 = &a; //error

Q英語の意味が分かりません。QA environment

英訳が分からないのですが、技術的なことなので
ここで質問させてもらいました。

以下にあるQA environmentの意味が分かりません。

In which environment are you experiencing the problem?
Is this in production or just a development environment.
If this is in the production do you have a QA environment that mirrors a copy of production?

開発機か本番機のどちらで問題が起きているのか?
もし本番機で問題が起きているならQA Environmentは
あるか?といっているようですが、テストができる環境があるのか?みたいなことを聞いているのでしょうか。

どなたか、お教え頂けないでしょうか。

Aベストアンサー

大まかな意味は、その通りだと思います。

「that mirrors a copy of production」
といっているので、
本番環境と同等のテスト環境、ないしは本番環境のコピーそのものという意味でしょう。

QA(品質管理)というからには
ただ単にテストできる環境、ではなく、
そこでテストすれば本番でテストしたのと同等となる(=品質が担保できる)ような環境、という意図ではないかと。

QAES暗号にて、AES_set_encrypt_keyで設定されるAES_KEYについて

VC++2008にてopensslを用いて、AES暗号/復号の機能を作成しています。

AES_set_encrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_ENCRYPT)にて暗号、
AES_set_decrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_DECRYPT)にて復号するコーディングをしました。

(http://d.hatena.ne.jp/hnko/20090302/1235977892のenc_aes128_cbc_test()を参考にしましたので、
一連の流れは、こことほぼ同じです)

デバッグしてみると、一見、暗復号が問題なく出来ていたので、
AES_set_encrypt_key関数の第一引数のkey配列の値と、
ivec配列の値を変えて、デバッグしてみたところ、
key配列を変更すると、暗号化後の文字列も変更されますが、
ivec配列を変更しても、暗号後の文字列に変化が有りませんでした。

調べてみたところ、AES_set_encrypt_keyにて返される
AES_KEYのroundsの値が常に同じであることが原因と思われますが、
roundsの値が常に一定だと、暗号解読が比較的容易に
出来てしまうと思うのですが、上記で挙げたサイトでの
コーディングの他に、何か別にコーディングを足さなければならないのでしょうか?

よろしくお願いします。

VC++2008にてopensslを用いて、AES暗号/復号の機能を作成しています。

AES_set_encrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_ENCRYPT)にて暗号、
AES_set_decrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_DECRYPT)にて復号するコーディングをしました。

(http://d.hatena.ne.jp/hnko/20090302/1235977892のenc_aes128_cbc_test()を参考にしましたので、
一連の流れは、こことほぼ同じです)

デバッグしてみると、一見、暗復号が問題なく出来ていたので、
AES_set_encrypt_key関数の第一引...続きを読む

Aベストアンサー

>ivec配列を変更しても、暗号後の文字列に変化が有りませんでした。
初期ベクタを変えれば必ず暗号文が変化する筈。
変わらないとしたら、初期ベクタを変えているつもりで変わってないだけ。

因みに、初期ベクタは、1ブロック暗号化するたびに内容が更新されていくので、使い方を間違えないように。

>roundsの値が常に一定だと、暗号解読が比較的容易に
暗号鍵を変えればAES_KEYの内容も変化する筈。
変わらないとしたら、暗号鍵を変えているつもりで変わってないだけ。

Q顧客に提出するQA表を作るよう頼まれています。

顧客に提出するQA表を作るよう頼まれています。

文章能力が足らないため、QA表での質問の仕方に不安を感じています。
IT業界独特の言い回しなど、あまり詳しくないためよくわかりません。
最低限、ビジネスとして恥ずかしくない文章を使って質問をしたいのですが、
何か心がける点があればご教授願いたいです。


よろしくお願いします。
(※当方、未経験でIT業界に入った30代新人です)

Aベストアンサー

思いつくままランダムに書きあげてみました。
・QAは作成時にはランダムでも、提出時には分類して整理し提出すること
・何度も読み直し、的を得たQAになっているか十分確認すること
・解らない用語等がある場合には、できる範囲でいくらかは調べてから質問すること
 (時には顧客固有の用語を使っているケースもあるので、用語の意味を質問するのは必ずしも失礼には当たらない)
・できれば回答は簡単に出来るほうが良い(Yes/No等)
 しかし場合によっては要件を遡り目的を質問することによって、より適切なソリューションがある場合もあるので留意すること
・IT業界独特の言い回しなどは徐々に理解すれば良い

Qunsigned char SJis[2]からstd::stringに変換

開発環境は VC++ 2008 Express Edition
あるDLLの関数で戻り値としてShiftJISの1文字が格納された

unsigned char SJis[2]

が返され,これを呼び出し側のプログラムで使っている文字列

std::string str

に順に追加していこうと思っています.
そこで,

unsigned char tmpSJis[3];
tmpSJis[0] = SJis[0];
tmpSJis[1] = SJis[1];
tmpSJis[2] = '\0';
str += std::string(tmpCode);

というコードを書いてループさせたのですが,

error C2440: '<function-style-cast>' : 'unsigned char *' から 'std::string' に変換できません。

というエラーが出てしまいうまく変換できません.
これを解決する方法はありませんか?

Aベストアンサー

str.append(SJis + 0, SJis + 2);

で解決しませんか?

Qキングソフト関係のQA掲示板

パソコンを購入しようと思います。オフィスにこだわっていましたが、キングソフトのシェアが20%なので世間の人は認めていると思います。ヨドバシの人もマクロとかするなら別だが、通常の作業をするならばキングで充分だといっていました。欠点は思いらしいですが、当初最低価格のパソコンを購入
するつもりでしたが、1ランクあげます。
作業でつまったときオフィス関係のQA掲示板はあるのですが、キングソフトのQA掲示板はあるのでしょうか。あるいは従来通りオフィス関係のQA掲示板でまかなうことができるのでしょうか。

Aベストアンサー

>あるいは従来通りオフィス関係のQA掲示板でまかなうことができるのでしょうか。
質問を出してみないと判らないと思う。内容による。両者を知り尽くしていると言うレベルの人は多くないと思う。
また例え世の中にいたとしても、この質問コーナーで回答してくれる人は時間的に余裕の在る特殊な人だと思うので、現役の極く詳しいプロがこのコーナーの質問を見ているとしたら、仕事をしていないことになって、ありえないと思う。稼ぎにもならぬし、そういう初歩的なレベルの人の質問は、普通は知り尽くしているレベルの人には勉強にもならないから。またそれらの人が時間を取っては社会的に損失です。
またその他の人にも、キングソフトの質問というだけで、自分は使ってないとして、考えてもらえない可能はあると思う。
本質は同じだとまで考えて、回答してくれるか、長きに渉って本コーナーのエクセルなどをみてきたものとして疑問。

Qstd::stringstream で得るものを char にしたいです。

「std::stringstream 」で得るデータを、
「char」にしたい気持ちです。

具体的には、以下の場面で、
==================================
std::stringstream foo ;
foo << "19900720" << "ftp.co.jp";
==================================

得られる「foo」を
「std::stringstream」ではなく、
「char」型で以下put処理を行う際の「foo」に
流し込みたいと思っています。


/* putにて「foo」の中身をcharで流し込みたい */
put(foo, value);

こんなときには、
どのように型の変換を行うための1行を挟めばいいのかを、
教えていただけるとありがたいです。

=============================================
std::stringstream foo ;
foo << "19900720" << "ftp.co.jp";

/*「foo」をcharに型変換を希望 */

put(foo, value); 
=============================================

「std::stringstream 」で得るデータを、
「char」にしたい気持ちです。

具体的には、以下の場面で、
==================================
std::stringstream foo ;
foo << "19900720" << "ftp.co.jp";
==================================

得られる「foo」を
「std::stringstream」ではなく、
「char」型で以下put処理を行う際の「foo」に
流し込みたいと思っています。


/* putにて「foo」の中身をcharで流し込みたい */
put(foo, value);

こんなときには、
どのように型の変換を行うた...続きを読む

Aベストアンサー

「char で流し込む」の意味はよくわかりませんが
put(foo.str().c_str(), value);
でよかったりして.

Q本来のQAに戻りつつあると思いませんか・・・

みなさん、こんにちは。

この頃の、QAの遣り取りを拝見してると、すっきり爽やかな気がしませんか。
(一部の心無い輩が罵声、暴言書き込みをしていますが、馴れ合い感の無いQAに戻って来てると思います。)

本来のあるべき姿に戻って来てると感じるのは僕だけでしょうか・・・

みなさんは、どう思われますか?

教えて下さい。

では、どうぞ。

Aベストアンサー

 具体的に何処がつまらないのですか?
此処はQAですので、何処がつまらないのか?教えて下さいませんか。


今答えます。画像に気を使う人が増えたからつまらなくなったのです。

皆さん「化け猫」の言葉には過敏になっていらっしゃるようです。

Qキャストの仕方(std::stringをconst char*へ)を教えてください。

c++で作成したものをコンパイルしたところ、
下記のようなエラーメッセージが表示されました。

cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int stat(const char*, stat*)

自分の解釈では、
stat関数の第1引数がconst char*なのに、
プログラムの中では
 #include <sys/types.h>
 #include <sys/stat.h>
 using namespace std;
  :
 string aaa;
  :
 struct stat st;
 if(stat(aaa,&st)!=-1){・・・
  :
という感じで記述しているので、
型が変換できない
という感じのことを言っているのかなぁ・・・?
と思っているのですが、間違いですか?

また、間違えていないとしたら・・・、
このstringで宣言しているaaaをchar*(?)にキャストする方法
と言いますか、このエラーを解決する方法を教えてください。

毎度のことですが、理解不十分で、質問の意味が通じにくいかも
しれませんが、どうか宜しくお願いいたします。m(_ _)m

c++で作成したものをコンパイルしたところ、
下記のようなエラーメッセージが表示されました。

cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int stat(const char*, stat*)

自分の解釈では、
stat関数の第1引数がconst char*なのに、
プログラムの中では
 #include <sys/types.h>
 #include <sys/stat.h>
 using namespace std;
  :
 string aaa;
  :
 struct stat st;
 if(stat(aaa,&st)!=-1){・・・
  :
という感じで記述しているので、
型が変換で...続きを読む

Aベストアンサー

 if(stat(aaa.c_str(),&st)!=-1){・・・


人気Q&Aランキング