2009-10-11 97 views
1

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

这是错误:在文件 未定义第一次引用 符号

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

回答

10

您使用的$代替&当你宣布add()这里...

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); 
+0

谢谢你们我现在感觉很蠢 – Breander 2009-10-11 19:35:05

+2

我们都会这样做:) – GManNickG 2009-10-11 19:35:53

4

的问题是靠近你的代码的开头错字:

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

替换$与&修复它。