C++ fout: undefined symbolen voor architectuur X86_64

Ik probeer C++ te leren en probeerde een probleem op te lossen waarbij een aantal stappen en het aantal mogelijke manieren waarop je de stappen kunt klimmen, alle permutaties van de mogelijke manieren waarop je de stappen kunt beklimmen, . Als er bijvoorbeeld 5 stappen zijn om te klimmen en kan ik 1 stap tegelijk oplopen, 2 stappen per keer of 3 stappen tegelijk, ik moet alle permutaties van 1, 2 en 3 dat moeten afdrukken Tellen tot 5: [1, 1, 1, 1, 1], [1, 1, 1, 2], ….

Ik begon met deze code (het is nog niet gedaan), maar ik krijg deze foutmelding:

Undefined symbols for architecture x86_64:
  "_num_steps(int, std::__1::vector<int, std::__1::allocator<int> >, std::__1::vector<std::__1::vector<int, std::__1::allocator<int> >, std::__1::allocator<std::__1::vector<int, std::__1::allocator<int> > > >, std::__1::vector<std::__1::vector<int, std::__1::allocator<int> >, std::__1::allocator<std::__1::vector<int, std::__1::allocator<int> > > >)", referenced from:
      num_steps(int, std::__1::vector<int, std::__1::allocator<int> >) in num_steps-FTVSiK.o
ld: symbol(s) not found for architecture x86_64

Ik snap echt niet wat ik verkeerd doe. Ik zou het op prijs stellen als ik hulp kon krijgen. Bedankt!

#include <iostream>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
//prototypes
void _num_steps(int amount, vector<int> possible_steps, vector<vector<int>> steps_list,             vector<vector<int>> result);
int sum(vector<int> steps_list);
void num_steps(int amount, vector<int> possible_steps);
//
//
// 
void num_steps(int amount, vector<int> possible_steps) {
    vector<vector<int>> result;
    _num_steps(amount, possible_steps, {{}}, result);
    //print_result(result);
}
int sum(vector<int> steps_list) {
    int sum_of_steps(0);
    for (auto step: steps_list) {
        sum_of_steps += step;
    }
    return sum_of_steps;
}
void _num_steps(int amount, vector<int> possible_steps, vector<int> steps_list,  vector<vector<int>> result) {
    if (sum(steps_list) == amount) {
        result.push_back(steps_list);
        return;
    } 
    else if (sum(steps_list) >= amount) {
        return; 
    }
    for (auto steps: possible_steps) {
        auto steps_list_copy = steps_list;
        steps_list_copy.push_back(steps);
        _num_steps(amount, possible_steps, steps_list_copy, result);
    }
    cout << "yeah" << endl;
    return;
}
int main(int argc, char* argv[]) {
    num_steps(5, {1, 2, 3});
    return 0;
} 

Antwoord 1, autoriteit 100%

Je compilerfout komt van het feit dat je handtekening voor de voorwaartse declaratie van _num_stepsniet overeenkomt met de handtekening van je definitie van _num_steps. het type steps_listkomt niet overeen

Wijzig uw prototypelijn in:

void _num_steps(int amount, vector<int> possible_steps, vector<int> steps_list, vector<vector<int>> result);

Antwoord 2, autoriteit 55%

De typen in de argumentenlijst van een functiedeclaratie en de definitie ervan moeten hetzelfde zijn.

De jouwe komt niet overeen.

Verklaring:

void _num_steps(int amount, vector<int> possible_steps, vector<vector<int>> steps_list, vector<vector<int>> result);

Definitie:

void _num_steps(int amount, vector<int> possible_steps, vector<int> steps_list,  vector<vector<int>> result) { /* ... */ }

Other episodes