none
求教一个简单的template问题 RRS feed

  • 问题

  • 我也是才接触C++;自己写了一个很简单的小程序。

    #include<iostream>
    using namespace std;

    int swap(int &a,int &b);
    int main()
    {
      int a,b;
      cout<<"a=";
      cout<<"b=";
      cin>>a>>b;
      cout<<"swap(a,b)="<<swap(a,b)<<endl;
    }

    template <typename T>
    void swap(T&x,T&y)
    {
     T z;
     x=y;
     y=z;
     z=x;
    }

     

    最后出现了LNK1120问题,说是有一个无法解析的外部命令。

    就是:error LNK2019: 无法解析的外部符号 "int __cdecl swap(int &,int &)" (?swap@@YAHAAH0@Z),该符号在函数 _main 中被引用
    1>c:\users\administrator\documents\visual studio 2010\Projects\template_swap\Debug\template_swap.exe : fatal error LNK1120: 1 个无法解析的外部命令

    请教专家给我详细解释一下。我也是才学。谢谢了!

    2010年12月5日 12:07

答案

  • 最后我把问题解决了。我用2010QQ在上面和别人交流了一下,最后解决了。但是在途中遇到了一个新问题。就是2010QQ上面发的代码粘贴到visual studio 2010上面无法识别字母。没法编译。(只能把2010QQ上粘贴的代码先保存在TXT文件中,再在文件中复制粘贴到studio 2010上)(貌似只有2010QQ有这问题)这个问题和你也分享一下。希望能对你有用吧。还是很感谢你。
    2010年12月6日 13:20

全部回复

  • 你是新手吧。。, 发现你那边的代码问题真不少
    1、上面声明的 int swap(int &a, int &b); 不但不少下面的模板声明, 而且连返回值都变了(应该都是copy过来的吧)
    2、swap函数内容 x、y、z的交换逻辑不对
    3、我不明白你个 swap 函数需要返回什么东西。。, 貌似没什么东西可以返回
    4、你的 swap 函数名和 系统的库中的swap重名了(应该是std::swap, 不确定哪个,不过肯定是重名了)
    我帮你修改了下语法错误, swap 的返回值是随便找个东西返回的,
    代码如下(经测试, vs2008express下可以通过编译运行):
    "
    #include<iostream>
    using namespace std;

    //int swap(int &a,int &b);
    template <typename T>
    T swap2(T &a,T &b);

    int main()
    {
      int a,b;
      cout<<"a=";
      cout<<"b=";
      cin>>a>>b;
      //cout<<"swap(a,b)="<<swap(a,b)<<endl;
      cout<<"swap(a,b)="<<swap2(a,b)<<endl;

      system("pause");
    }

    template <typename T>
    //T swap2(T&x,T&y)
    T swap(T&x,T&y)
    {
     T z;
     //x=y;
     //y=z;
     //z=x;
     z = x;
     x = y;
     y = z;
     return z;
    }
    "
    2010年12月6日 0:56
  • 非常感谢。我确实是一个新手。现在遇到的问题确实很多,平时也就是看书,操作太少。很感谢。。
    2010年12月6日 11:44
  • 我刚才用visual studio 2010编译了一下。还是没有通过问题还是:emplatemain.obj : error LNK2019: 无法解析的外部符号 "int __cdecl swap2<int>(int &,int &)" (??$swap2@H@@YAHAAH0@Z),该符号在函数 _main 中被引用
    1>c:\users\administrator\documents\visual studio 2010\Projects\template\Debug\template.exe : fatal error LNK1120: 1 个无法解析的外部命令
    1>
    2010年12月6日 12:10
  • 最后我把问题解决了。我用2010QQ在上面和别人交流了一下,最后解决了。但是在途中遇到了一个新问题。就是2010QQ上面发的代码粘贴到visual studio 2010上面无法识别字母。没法编译。(只能把2010QQ上粘贴的代码先保存在TXT文件中,再在文件中复制粘贴到studio 2010上)(貌似只有2010QQ有这问题)这个问题和你也分享一下。希望能对你有用吧。还是很感谢你。
    2010年12月6日 13:20