invalid conversion from ‘void*’ to ‘dns_rdata_t*’



  • Hallo,
    ich versuche gerade ein paket in kdevelope fehlerfrei zu kompilieren.

    char t[4096];
    	dns_rdata_t rdata = DNS_RDATA_INIT;
    
    	UNUSED(flags);
    

    Wie kann ich folgender Fehlermeldung vermeiden?

    invalid conversion from ‘void*’ to ‘dns_rdata_t*’

    danke



  • Wer verursacht denn diese Fehlermeldung? In deinem Code-Fragment tauchen keine Zeiger auf, die dafür verantwortlich sein könnten.



  • ich verstehe es nicht genau. wenn ich den Code mit configure und MAKE kompiliere bekomm ich beim original keine Fehlermeldung.

    also müsste es auch so funktionieren?

    ich kann ja mal die ganze funktion posten:

    static isc_result_t
    short_answer(dns_message_t *msg, dns_messagetextflag_t flags,
    	     isc_buffer_t *buf, dig_query_t *query)
    {
    	dns_name_t *name;
    	dns_rdataset_t *rdataset;
    	isc_buffer_t target;
    	isc_result_t result, loopresult;
    	dns_name_t empty_name;
    	char t[4096];
    	dns_rdata_t  rdata =  DNS_RDATA_INIT;
    
    	UNUSED(flags);
    
    	dns_name_init(&empty_name, NULL);
    	result = dns_message_firstname(msg, DNS_SECTION_ANSWER);
    	if (result == ISC_R_NOMORE)
    		return (ISC_R_SUCCESS);
    	else if (result != ISC_R_SUCCESS)
    		return (result);
    
    	for (;;) {
    		name = NULL;
    		dns_message_currentname(msg, DNS_SECTION_ANSWER, &name);
    
    		isc_buffer_init(&target, t, sizeof(t));
    
    		for (rdataset = ISC_LIST_HEAD(name->list);
    		     rdataset != NULL;
    		     rdataset = ISC_LIST_NEXT(rdataset, link)) {
    			loopresult = dns_rdataset_first(rdataset);
    			while (loopresult == ISC_R_SUCCESS) {
    				dns_rdataset_current(rdataset, &rdata);
    				result = say_message(&rdata, query,
    						     buf);
    				check_result(result, "say_message");
    				loopresult = dns_rdataset_next(rdataset);
    				dns_rdata_reset(&rdata);
    			}
    		}
    		result = dns_message_nextname(msg, DNS_SECTION_ANSWER);
    		if (result == ISC_R_NOMORE)
    			break;
    		else if (result != ISC_R_SUCCESS)
    			return (result);
    	}
    
    	return (ISC_R_SUCCESS);
    }
    


  • Es wäre immer noch hilfreich zu wissen, über welche Zeile der Compiler eigentlich stolpert.

    Die Fehlermeldung besagt wörtlich, daß du einen void* (Zeiger auf irgendwas) an einen typisierten Zeiger zugewiesen hast - das war in C noch legal, in C++ aber nur über einen expliziten Cast erlaubt. Allerdings sehe ich beim Überfliegen deiner Funktion die Zuweisung nicht, die problematisch sein könnte.



  • bier_not schrieb:

    for (rdataset = ISC_LIST_HEAD(name->list);
                 rdataset != NULL;
                 rdataset = ISC_LIST_NEXT(rdataset, link)) {
    

    Naja, da sind ja schonmal 3 Zuweisungen, die das verursachen können (ist NULL evtl als "(void 😉 (0))" definiert ? )

    Gruß,

    Simon2.



  • Kann es sein dass configure und make den gcc als Compiler verwenden, während Du es mit g++ versuchst?



  • ich hab g++ genutzt.

    ich versuche es mal unter C zu compilieren. Mal sehen was mir jetzt um die ohren fliegt, vielen Dank erst mal.


Anmelden zum Antworten