1. ホーム
  2. c++

[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル

2022-01-03 05:50:34

質問

C++を学ぼうとしているのですが、段数とその段を登ることができる方法の数が与えられたときに、その段を登ることができる方法のすべての順列を与えるという問題を解決しようとしていました。例えば、5段の階段があり、一度に1段、2段、3段と上がることができる場合、1、2、3の順列のうち5を足したものをすべて出力する必要があるわけです。 [1, 1, 1, 1, 1] , [1, 1, 1, 2] , ....

このコードで始めたのですが(まだできてません)、こんなエラーが出ます。

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

何が間違っているのか、本当に分からないんです。助けてもらえるとありがたいのですが。ありがとうございます。

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

解決方法は?

コンパイラーエラーの原因は、前方宣言の署名が _num_steps の定義のシグネチャと一致しません。 _num_steps の型は steps_list とは一致しません。

プロトタイプの行を変更します。

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