System::String::Format Problem



  • Hey,

    vorweg: ich nutze Managed C++ Code in meinem Programm.

    Jetzt habe ich folgendes Problem:

    Beim Kompilieren von folgendem Code:

    throw __gc new Exception(System::String::Format("a = {0} & b = {1} found!", TokenA->getText(), TokenB->getText()));
    

    erhalte ich diese Fehlermeldung:

    "'System::String::Format': Durch keine der 5 Überladungen kann Parameter 3 vom Typ 'int' konvertiert werden"

    Was mache ich falsch? Wie muss es richtig programmiert werden?
    Danke schonmal!

    Gruß



  • 1. Falsches Forum: Du hast doch neulich schon im korrekten Forum gepostet, so schwer?
    2. Was ist der Rückgabetype von getText()?

    Edit:
    Und guck doch mal bei MSDN vorbei:
    http://msdn.microsoft.com/en-us/library/aa331875(VS.71).aspx



  • 1. Sorry, war mir nicht sicher, obs ins CLI/C++ Forum gehört oder hier rein.
    2. Der Rückgabe Wert ist System::String*



  • simhi88 schrieb:

    1. Sorry, war mir nicht sicher, obs ins CLI/C++ Forum gehört oder hier rein.

    Hier gehören Fragen zu Ansi C++, nicht irgendwelchen MS-Ablegern hinein (Spätestens wenn dort Dinge wie GC und .Net-Namensräume auftauchen, sollte dies klar sein).

    simhi88 schrieb:

    2. Der Rückgabe Wert ist System::String*

    Für mich (wobei ich mich hier nur grundlegend auskenne) sieht dies weniger nach Managed C++, sondern eher nach C++/CLI (dem Nachfolger ab VS2005) aus. Wenn dem so wäre: Müsste dann nicht der Rückgabewert System::String^ sein?



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Danke fürs Verschieben!

    @asc: Nein, CLI ist das nicht.

    Hätte jemand sonst noch eine Lösung?



  • Lösung:

    throw __gc new Exception(System::String::Format("a = {0} & b = {1} found!", TokenA->getText(), __box(TokenB->getPos())));
    

    Ein kleines anderes Problem.. Unter CLI ist z.B. folgendes möglich:

    clInfo = lstInfos[lstInfos->Keys[iIndex]];
    

    Hat jemand vielleicht eine Idee wie ich dies unter Managed C++ programmieren könnte? Die Benutzung der eckigen Klammern ist zum Einen allgemein dort nicht möglich und zum Anderen auch nicht hinter "Keys" verwendbar.
    Gibt es eine andere Möglichkeit?



  • Hier mal ein Bsp.

    __gc class Token
    {
    public:
        Token(System::String* value)
            : _value(value)
        { }
    
        System::String* getText()
        {
            return _value;
        }
    
    private:
        System::String* _value;
    };
    
    int main()
    {
        Token* tokenA = __gc new Token(S"token A");
        Token* tokenB = __gc new Token(S"token B");
        System::String* str = System::String::Format(S"Token A is \'{0}\', token B is \'{1}\'", tokenA->getText(), tokenB->getText());
        System::Console::WriteLine(str);
    }
    

    Edit:
    Warum zur Hö*** zeigst Du nicht den Code, der den Fehler verursacht? Immer dasselbe!



  • Danke theta.

    Dennoch weiß ich nicht, was du meinst mit "immer dasselbe"?
    Ich zeige doch den Code, der den Fehler verursacht.



  • Funktioniert nicht:

    throw __gc new Exception(System::String::Format("a = {0} & b = {1} found!", TokenA->getText(), TokenB->getText()));

    Funktioniert:

    throw __gc new Exception(System::String::Format("a = {0} & b = {1} found!", TokenA->getText(), __box(TokenB->getPos())));

    Den Fehler mit dem __box(..) war sowiso schon in einen deiner letzen Threads zur Sprache gekommen.



  • Ja, ich war mir nur nicht sicher ob und wenn ja, wo ich das mit dem __box(..) anwenden muss/soll.

    Naja, egal.


Anmelden zum Antworten