web-dev-qa-db-ja.com

C ++エラー:アーキテクチャx86_64の未定義のシンボル

私はC++を習得しようとしていて、いくつかのステップと、ステップを上る方法の数を考えて、ステップを上る方法のすべての順列を提供するという問題を解決しようとしていました。たとえば、登るのに5つのステップがあり、一度に1ステップずつ、2ステップずつ、または3ステップずつ移動できる場合、1、2および3のすべての順列を出力する必要があります。 5まで追加:[1, 1, 1, 1, 1][1, 1, 1, 2]、..。

私はこのコードから始めました(まだ完了していません)が、次のエラーが発生します。

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

私は本当に私が間違っていることを理解していません。何か助けて頂ければありがたいです。ありがとう!

#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;
} 
13

コンパイラエラーは、_num_stepsの前方宣言の署名が_num_stepsの定義の署名と一致しないために発生します。 steps_listのタイプが一致しません

プロトタイプの行を次のように変更します。

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

関数宣言の引数リストの型とその定義は同じでなければなりません。

あなたは一致しません。

宣言:

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

定義:

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