Domanda

Purtroppo ho ancora un problema con il mio codice modello da qui:

Problema del codice del modello di fantasia C ++

sulla riga 49 nell'utilità del file:

error C2440: 'Initializing': cannot convert from 'const int' to 'IntersectionData *'

error C2439: 'std::pair<_Ty1,_Ty2>::second': member could not be initialized

Come potrei capire dove si trova il problema? L'unico posto in cui uso una coppia con 'IntersectionData*' è qui:

#include "MRMaterialMatth.h"
#include "IntersectionData.h"
using namespace std;

struct IShaderMatth {
 virtual ~IShaderMatth() {}
 vector<pair<MaterialMatth,IntersectionData*> > traceCols; 
};

e non ci sono altri errori del compilatore

Come posso rintracciare questo?

// Modifica: l'utilità non è il mio codice. Deve essere da std .. il codice della riga 49 sembra così:

template<class _Other1,
    class _Other2>
    pair(const pair<_Other1, _Other2>& _Right)
    : first(_Right.first), second(_Right.second)
    {   // construct from compatible pair
    }

La riga 49 è la riga del commento

EDIT2: Gli unici posti in cui cambio qualcosa sul contenuto di Tracecoli sembrano questo:

            IntersectionData* iDataOut = NULL;
            if(newIData_out!=NULL)
            {
                iDataOut = new IntersectionData(*iData);
            }
            traceCols->push_back(make_pair(MaterialMatth(),iDataOut));

e

    if(traceCols){
        traceCols->push_back(make_pair(MaterialMatth(), NULL));
    }

e

        if(traceCols)
        {
            (*traceCols)[traceCols->size()].second = new IntersectionData(*newIData);
        }

Null è il problema? È un puntatore, quindi dovrei essere autorizzato a creare una coppia con null, no ??

È stato utile?

Soluzione

Prova a lanciare esplicitamente il NULL a IntersectionData * Nella tua chiamata a make_pair().

if(traceCols){
        traceCols->push_back(make_pair(MaterialMatth(), (IntersectionData *)NULL));
}

Altri suggerimenti

C'è un problema inizializzando una di quelle coppie.

Chiediti: "Cosa inizializza?"

La risposta è il vettoriale tracecoli.

Ora chiedi: "Dove sto creando elementi in Tracecols?"

Una volta che rispondi, dovresti sapere cosa non va.

Fai attenzione alla linea (*traceCols)[traceCols->size()].second = new IntersectionData(*newIData) - Sembra che sarebbe uscito dai limiti del vettore (poiché il più grande indice di un vettore è size() - 1).

Non sono sicuro che il null lo stia causando - quindi commenta quella linea e vedi di persona (o prova il suggerimento di Dave)! Se non funziona, commenta un altro. Alla fine, troverai quale linea e sarai in grado di porre una domanda più specifica, o non sarà nessuna di queste cose e saprai che devi cercare altrove. Questo è quello che faccio quando vedo tutti questi sciocchi messaggi di errore del compilatore.

Sembra che tu abbia un incarico da qualche parte da un pair<MaterialMatth,int>. Il compilatore sta cercando di convertirsi da quello alla dichiarazione che hai elencato, ma non può convertirsi da un INT in un puntatore senza un cast esplicito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top