2016-07-15 16 views
0

新しいオブジェクトへの新しいポインタを作成し、直ちにデキューにpush_frontを作成します。代わりにemplace_frontを使用したいが、コンパイルエラーが出ている。Deque emplace_back新しいオブジェクトへのポインタ

Myオブジェクトのコンストラクタには、1つの文字列引数が必要です。他のウェブサイトからの参照後

std::deque<NetPacket*> q_IncomingPackets; 

q_IncomingPackets.push_back(new NetPacket(std::string(uncompressed_data, retVal)))); 
q_IncomingPackets.emplace_back(std::string(uncompressed_data, retVal)); 

私は単にemplace_backためpush_backを交換しますが、次のエラーが出ると考えていた:

Error C2440 'initializing': cannot convert from 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' to 'PeerNet::NetPacket *' PeerNet \vc\include\xmemory0 737 

参照がオブジェクトに新しいポインタを作成するときに据え付ける使用について話していません、具体的なオブジェクトだけです。 cppreference.comcplusplus.com

答えて

1

std::deque::emplace_backここNetPacket*である、Args&&... argsvalue_typeを構築するために期待しています。

NetPacket*std::stringから構築する方法はありません。そのため、コンパイラのエラーが表示されます。

値のタイプがNetPacket*(生のポインタ)なので、push_backemplace_backのあまりの違いはありません。

関連する問題