wie krieg ich den fehler weg????????



  • hallo erstmal
    hab eine billige datenbank entwickelt mit access in will einen neuen daten satz hinzufügen hab auch ein buch zur ahnd aber da gehen die ja auf evtl. auftrettende Fehler nicht ein also kann mir jemand helf der fehler ist laute:

    G:\MY_PRJECTZ\datenbank\datenbankView.cpp(147) : error C2666: '+' : 4 overloads have similar conversions

    kann mir zwar denken was das heisst aber wie ich es behebe da habe ich echt KEIN PLAN



  • Zeig mal die Zeile. Er weiß nämlich nicht, welche Version von + er nutzen soll.



  • das ist die zeile hoffe du kannst damit was anfangen
    CString m_lNewID = m_pSet->GetMaxID() +1;



  • naja dein m_lNewID ist vom typ CString, deswegen kanns glaub net klappen

    in der msdn nehmen die

    var nDispID = window.external.FindSymbol("DISPID");
          if (!nDispID.length)
          {
             nDispID = GetMaxID(oInterface) + 1;
             window.external.AddSymbol("DISPID", nDispID);
    

    und du kannst nicht in einem CString einfach ein +1 machen. strings und ints sind 2 paar stiefel. und die getmaxid ist glaub vom typ hex kannste also auch nicht einem CString zuweisen 😉

    ich hoffe der msdn text hilft dir, wenn nicht dann schau dir komplett bsp an in der msdn



  • im beispiel haten sie es mit long gemacht aber als ich dei datenbank erstellt habe wollte er kein long deshalg gab es probleme nun hab ich alles wo long war auf cString gemacht und es war nur noch 1 fehler deswegen dachte ich das währe die lösung aber naja hab dank muss mal schauen wie ich das jetzt umwurschtel



  • nimm halt long und dann machst ein cast oder so keine ahnung

    nur was mich stuzig macht ist folgendes

    also das hier geht nicht

    CString ID = "hallo" ;
    
    ID = ID + 1 ;    / geht net
    

    das hier geht aber

    CString ID = "hallo" + 1;  // ID ist jetzt dann "allo"  also geht hmmm  :confused:
    

    weis jemand warum???



  • Das ist wohl ein Überbleibsel von C.

    Wenn du einen char* hast und dann einen hochzählst, gehst du einen char weiter. Also einen Buchstaben.

    ... verstanden?

    Was gibt GetMaxID() zurück?

    Also auf einen CString eine Zahl draufzählen ist keine gute Idee.

    CString in Zahl wandeln geht mit atoi, vielleicht hilft es. Ich muss jetzt offline, daher die Kurzfassung.



  • estartu_de schrieb:

    Das ist wohl ein Überbleibsel von C.

    Wenn du einen char* hast und dann einen hochzählst, gehst du einen char weiter. Also einen Buchstaben.

    ... verstanden?

    nicht ganz

    das ich dann in der ascii tabelle ein zeichen weitergehe ist klar

    aber der loscht ja ein zeichen am anfang und geht ja kein zeichen weiter hmmm

    sprich "hallo" + 2 ergibt dann "llo"



  • Schon ganz.

    Grob gesagt: Mit +2 setz du einfach den Zeiger 2 Zeichen weiter.



  • Hallo,

    das ist ganz einfache Zeiger-Arithmetik, "hallo" wird vom Compiler in einen Zeiger auf const char "umgewandelt". Addition eines Wertes n bedeutet dann, daß der Zeiger n * sizeof(char) Positionen weiterbewegt wird, womit das Verhalten erklärt ist (es werden also keine Zeichen gelöscht, sondern lediglich die Anfangsposition für die Initialisierung des CStrings ist eine andere). Das gleiche kann man auch so erreichen (nur eine Spielerei, zeigt nur, was man alles treiben kann):

    CString tst = &("hallo"[2]);
    

    auch hier wird in tst die Zeichenkette "llo" stehen 😉

    MfG


Anmelden zum Antworten