help!请大神帮小弟我看上这段程序有什么有关问题
help!!!请大神帮我看下这段程序有什么问题
在VS2010下写了一个小程序,但是编译出错,不太明白什么问题,有谁懂得请指正下,谢了先~
上面两个分别是BasicAlgorithms.h 和BasicAlgorithms.cpp文件,现在只是实现一个排序算法。主函数如下:
就是对容器中的20个数进行排序,然后输出。但是编译的时候出现了错误:
error LNK2019: 无法解析的外部符号 "public: void __thiscall BasicAlgorithms::InsertionSort<int>(class std::vector<int,class std::allocator<int> > &)" (??$InsertionSort@H@BasicAlgorithms@@QAEXAAV?$vector@HV?$allocator@H@std@@@std@@@Z),该符号在函数 _wmain 中被引用。
------解决方案--------------------
把BasicAlgorithms.cpp中的函数定义放到BasicAlgorithms.h中去。
模版函数的定义和声明是不容许分离的。
否则无法链接上函数,会报链接错误error LNK2019:
------解决方案--------------------
楼上正确,
其实这种写法从语法来说是正确的,但是编译器不支持!
包括gcc vc等等都不支持
在VS2010下写了一个小程序,但是编译出错,不太明白什么问题,有谁懂得请指正下,谢了先~
- C/C++ code
#ifndef BASIC_ALGORITHMS_H #define BASIC_ALGORITHMS_H #include "stdafx.h" #include <vector> using namespace std; class BasicAlgorithms { public: template<typename Type> void InsertionSort(vector<Type> &); }; #endif
- C/C++ code
#include "stdafx.h" #include "BasicAlgorithms.h" template <typename Type> void BasicAlgorithms::InsertionSort(vector<Type> &vec_to_sort) { vector<Type>::size_type i=0; for(vector<Type::size_type j=2;j<vec_to_sort.size();j++) { Type key=vec_to_sort[j]; i=j-1; while(i>0&&vec_to_sort[i]>key) { vec_to_sort[i+1]=vec_to_sort[i]; i--; } vec_to_sort[i+1]=key; } }
上面两个分别是BasicAlgorithms.h 和BasicAlgorithms.cpp文件,现在只是实现一个排序算法。主函数如下:
- C/C++ code
#include "stdafx.h" #include "BasicAlgorithms.h" #include <vector> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { vector<int> vec(20); int temp=0; for(vector<int>::size_type i=0;i<vec.size();i++) { temp=rand(); cout<<temp<<endl; vec.push_back(temp); } BasicAlgorithms ba; ba.InsertionSort(vec); for(vector<int>::size_type i=0;i<vec.size();i++) { cout<<vec[i]<<endl; } return 0; }
就是对容器中的20个数进行排序,然后输出。但是编译的时候出现了错误:
error LNK2019: 无法解析的外部符号 "public: void __thiscall BasicAlgorithms::InsertionSort<int>(class std::vector<int,class std::allocator<int> > &)" (??$InsertionSort@H@BasicAlgorithms@@QAEXAAV?$vector@HV?$allocator@H@std@@@std@@@Z),该符号在函数 _wmain 中被引用。
------解决方案--------------------
把BasicAlgorithms.cpp中的函数定义放到BasicAlgorithms.h中去。
模版函数的定义和声明是不容许分离的。
否则无法链接上函数,会报链接错误error LNK2019:
------解决方案--------------------
楼上正确,
其实这种写法从语法来说是正确的,但是编译器不支持!
包括gcc vc等等都不支持