C++ 错误:架构 x86_64 的未定义符号

Posted

技术标签:

【中文标题】C++ 错误:架构 x86_64 的未定义符号【英文标题】:C++ error: Undefined symbols for architecture x86_64 【发布时间】:2014-05-14 04:15:25 【问题描述】:

我正在尝试学习 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;
 

【问题讨论】:

您是否查看过包含此确切错误的任何其他帖子?虽然并非所有内容都与您的确切主题有关,但它们都包含对导致错误的原因的解释以及有关如何纠正错误的信息,其中任何一个都可以(只需稍加思考)在此处应用于您自己的代码。如果已经有几十个帖子问同样的事情并得到相同的答案,那么再添加一个似乎是多余的。 (例如,请参阅此问题右侧的相关列表,了解其中至少 9 个其他链接。) 【参考方案1】:

您的编译器错误是由于您对_num_steps 的前向声明的签名与您对_num_steps 的定义的签名不匹配。 steps_list 的类型不匹配

将您的原型线更改为:

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

【讨论】:

【参考方案2】:

函数声明的参数列表中的类型和它的定义必须相同。

你的不匹配。

声明:

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)  /* ... */ 

【讨论】:

以上是关于C++ 错误:架构 x86_64 的未定义符号的主要内容,如果未能解决你的问题,请参考以下文章

C++ FFT 实现(架构 x86_64 的未定义符号)

编译时错误“架构 x86_64 的未定义符号”是啥意思?

架构 x86_64 的未定义符号:C++ OS X 向量

Quickblox:架构 x86_64 的未定义符号:错误

Xcode 错误 - 架构 x86_64 的未定义符号?

Swift 测试给出错误“架构 x86_64 的未定义符号”