残念ながら、ここからテンプレートコードに問題が発生しました。
ファイル'utility'の49行目:
error C2440: 'Initializing': cannot convert from 'const int' to 'IntersectionData *'
error C2439: 'std::pair<_Ty1,_Ty2>::second': member could not be initialized
問題がどこにあるのかをどうやって理解できますか?'IntersectionData *'とペアを使用する唯一の場所はここにあります:
#include "MRMaterialMatth.h"
#include "IntersectionData.h"
using namespace std;
struct IShaderMatth {
virtual ~IShaderMatth() {}
vector<pair<MaterialMatth,IntersectionData*> > traceCols;
};
他のコンパイラエラーはありません
どうすればこれを追跡できますか?
//編集:ユーティリティは私のコードではありません。stdからのものである必要があります。49行目のコードは次のようになります。
template<class _Other1,
class _Other2>
pair(const pair<_Other1, _Other2>& _Right)
: first(_Right.first), second(_Right.second)
{ // construct from compatible pair
}
49行目はコメントの行です
edit2:tracecolsの内容について何かを変更する唯一の場所は次のようになります:
IntersectionData* iDataOut = NULL;
if(newIData_out!=NULL)
{
iDataOut = new IntersectionData(*iData);
}
traceCols->push_back(make_pair(MaterialMatth(),iDataOut));
と
if(traceCols){
traceCols->push_back(make_pair(MaterialMatth(), NULL));
}
と
if(traceCols)
{
(*traceCols)[traceCols->size()].second = new IntersectionData(*newIData);
}
NULLは問題ですか?それはポインタなので、NULLでペアを作成することを許可する必要がありますね??