【问题标题】:return a list<int> from a function c++从函数 c++ 返回一个列表<int>
【发布时间】:2010-12-05 19:25:09
【问题描述】:

每次我尝试使用我的 add 函数并从中返回一个列表。我得到一个未定义的符号错误。我在这里做错了什么。

这是错误: 未定义的第一个引用 文件中的符号

add(std::list<int, std::allocator<int> > const&, std::list<int, std::allocator<int> >)/var/tmp//cc78hUrW.o

ld:致命:符号引用错误。没有输出写入 a.out collect2: ld 返回 1 个退出状态

#include <iostream>
#include <list>
#include <math.h>

using namespace std;

list<int> add(const list<int> &lhs, const list<int> $rhs);
list<int> sub(const list<int> &lhs, const list<int> $rhs);
list<int> mul(const list<int> &lhs, const list<int> &rhs);

int main(int argc, char* argv[])
{
    /*variables*/
    list<int> num1, num2, num3;
    list<int> ::iterator it1, it2, it3;
    char temp[1001];
    int x = 0, y = 0;

    it1 = num1.begin();

    for(x = 0; x <= 1001; x++)
        temp[x] = -42;

    cout << "Number 1: ";
    cin >> temp;

    for(x = 0; temp[x] != -42; x++)
        num1.insert(it1, temp[x] - '0');

    for(x = 0; x <= 1001; x++)
        temp[x] = -42;

    cout << "Number 2: ";
    cin >> temp;

    it2 = num2.begin();

    for(x = 0; temp[x] != -42; x++)
        num2.insert(it2, temp[x] - '0');

    it1 = num1.end();
    it1--;
    num1.erase(it1);

    for(it1 = num1.begin(); it1 != num1.end(); it1++)
         cout << *it1;
    cout << endl;

    it2 = num2.end();
    it2--;
    num2.erase(it2);

    for(it2 = num2.begin(); it2 != num2.end(); it2++)
    cout << *it2;
    cout << endl;

    num3 = add(num1, num2);

    for(it3 = num3.begin(); it3 != num3.end(); it3++)
    cout << *it3;
    cout << endl;

    return 0;
    }

    list<int> add(const list<int> &lhs,const list<int> &rhs)
    {
    /*Variables*/
    list<int> left = lhs;
    list<int> right = rhs;
    list<int> answer;
    list<int>::iterator itl, itr, ans;
    int cary = 0;
    int sum = 0;
    int lfint = 0, rtint = 0;
    int lsize=0, rsize=0;

    lsize = (int)left.size();
    rsize = (int)right.size();

    while(lsize < rsize)
    {
        itl = left.end();
        left.insert(itl, 0);
        lsize = (int)left.size();
    }

    while(rsize < lsize)
    {
         itr = right.end();
         right.insert(itr, 0);
         rsize = (int)right.size();
    }

    itl = left.begin();
    itr = right.begin();
    ans = answer.begin();

    while(itl != left.end())
    {
         lfint = *itl;
         rtint = *itr;
         sum = lfint + rtint;

         sum = sum + cary;
         cary = 0;

         if(sum >= 10)
         {
             sum = sum - 10;
             cary = 1;
         }

         answer.insert(ans, sum);
         itl++;
         itr++;
    }
    if(cary == 1)
    {
        answer.insert(ans, 1);
    }

    return answer;
    }

【问题讨论】:

    标签: c++ list function pointers linked-list


    【解决方案1】:

    您在此处声明 add() 时使用了 $ 而不是 &amp;...

    list<int> add(const list<int> &lhs, const list<int> $rhs);
    

    【讨论】:

      【解决方案2】:

      $ 符号在 C++ 中没有任何意义。可能是笔误。

      list<int> add(const list<int> &lhs, const list<int> $rhs);
      list<int> sub(const list<int> &lhs, const list<int> $rhs);
      

      应该是

      list<int> add(const list<int> &lhs, const list<int> &rhs);
      list<int> sub(const list<int> &lhs, const list<int> &rhs);
      

      【讨论】:

        【解决方案3】:

        问题是代码开头附近的拼写错误:

        list<int> add(const list<int> &lhs, const list<int> $rhs);
        list<int> sub(const list<int> &lhs, const list<int> $rhs);
        

        用 & 替换 $ 来修复它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-12
          • 1970-01-01
          • 2014-01-08
          • 1970-01-01
          • 2014-06-28
          • 1970-01-01
          相关资源
          最近更新 更多