Vektor durch Funktion deklarieren?



  • Ich versuche mich gerade an einem Programm, was aus einem Array die maximale Teilsumme und die dazugehörigen Indizes ausgibt und benötige daher ein Array als Ausgabe. Nun versuche ich innerhalb der Methode rekursiv ein Array mithilfe der selben Funktion zu deklarieren (siehe Code Zeile 6 und 7) und erhalte Fehlermeldungen (steht unter dem Code).

    Kann mir jemand bitte erklären, was genau das Problem ist und wie ich das am einfachsten beheben kann? (Compiler ist Visual Studio Code)

    std::vector<int> maxsum(const std::vector<int>& A) {
    ...
        int m = (A.size())/2;
        std::vector<int> Aleft (A.begin(), A.begin()+m);
        std::vector<int> Aright (A.begin()+m, A.end());
        std::vector<int> comp1 = maxsum(Aleft);
        std::vector<int> comp2 = maxsum(Aright);
    ...
    

    Fehlermeldung:
    "Ausdruck ergibt keine Funktion, die 1 Argumente übernimmt (C2064) [26, 1]"



  • Visual Studio Code ist ein Editor mit Anwandlungen einer IDE, aber es ist kein Compiler dabei.

    #include <vector>
      
    std::vector<int> maxsum(const std::vector<int>& A) {
        int m = (A.size())/2;
        std::vector<int> Aleft (A.begin(), A.begin()+m);
        std::vector<int> Aright (A.begin()+m, A.end());
        std::vector<int> comp1 = maxsum(Aleft);
        std::vector<int> comp2 = maxsum(Aright);
    
        return comp1;
    }
    

    Lässt sich bei mir mit
    GCC 11.1.0 und dem folgenden Aufruf

    g++-11 -std=c++20 -Wpedantic -Wall -Wextra -c recursive.cc -o recursive.o
    

    übersetzen.

    Also was für ein Compiler und welche Optionen werden genutzt?



  • Ich hab das Programm einmal neu gestartet und auf einmal hat es funktioniert. Hat anscheinend einfach nur rumgesponnen, trotzdem danke 😃



    1. Hat sich zwar erübrigt, aber du solltest bei sowas immer die Zeile dazuschreiben in der du die Fehlermeldung bekommst. In der Fehlermeldung steht Zeile 26, aber wo Zeile 26 in dem von dir gezeigten Ausschnitt ist können wir natürlich nicht wissen.

    2. Das schreit ja geradezu nach der Verwendung eines Zeigerpaars statt haufenweise Kopien des Vektors zu erstellen - und auch noch eine Kopie zurückzugeben. Bzw. du kannst auch gsl::span bzw. std::span verwenden, das ist dann noch komfortabler.


Anmelden zum Antworten