質問:
コンパイル時にクラスのインスタンスをstd :: mapに挿入しようとしていますが、常に以下のエラーが発生します。
main.cpp:18:12: error: ‘_info’ was not declared in this scope
_info(1)
^
行番号18は、コードのブロックの下を指します
15. std::map<std::string, Info > lookup {
16. {
17. "aclk",
18. _info(1)
19. }
20. };
コード:
#include <random>
#include <iostream>
#include <functional>
#include <map>
class Info{
int _info;
public:
Info(int info){
_info = info;
}
};
std::map<std::string, Info > lookup {
{
"aclk",
_info(1)
}
};
int main()
{
//dummy
}
観察:
オブジェクトを動的に作成すると、そのようなエラーは表示されません。
const std::map<std::string, Info > lookup {
{
"aclk",
new Info(1)
}
};
しかし、マップの存在const
とインスタンスの挿入new
は意味がありません。
Info
データメンバーの代わりに、そのタイプのオブジェクトを指定する必要があり_info
ます。例えば
std::map<std::string, Info > lookup {
{
"aclk",
1
}
};
クラスInfo
には変換コンストラクターがあるため、これは有効です。
または(たとえば、コンストラクターが明示的である場合)
std::map<std::string, Info > lookup {
{
"aclk",
Info(1)
}
};
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加