error: ld returned 1 exit status 和 error:undefined reference

undefined reference

往往是链接时出现错误,无法解析引用。这篇文章总结的很好undefined reference问题总结

error: ld returned 1 exit status

链接文件没有建立

案例

 1 #include<vector>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstdio>
 5 using namespace std;
 6 class Solution {
 7     static int** nv;
 8     static bool cmp(int x, int y){
 9         int lenx = nv[x][0];
10         int leny = nv[y][0];
11         for(int xi = lenx-1, yi = leny-1; xi > 0, yi > 0; xi--, yi--){
12             if(nv[x][xi] < nv[y][yi]) return true;
13             if(nv[x][xi] > nv[y][yi]) return false;
14         }
15         return false;
16     }
17 public:
18     vector<int> lexicalOrder(int n) {
19         nv = new int* [n+1];
20         for(int i = 1; i < n+1; i++){
21             nv[i] = new int[10];
22         }
23         for(int i = 1; i <= n; i ++){
24             int y = i;
25             int yi = 1;
26             while(y != 0){
27                 nv[i][yi++] = y % 10;
28                 y = y / 10;
29             }
30             nv[i][0] = yi;
31         }
32         vector<int> v;
33         for(int i = 1; i <= n; i ++){
34             v.push_back(i);
35         }
36         sort(v.begin(), v.end(), cmp);
37         return v;
38     }
39     // vector<int> lexicalOrderList(int start, int last, int s, int n, vector<int>& v){
40 
41     // }
42 
43 };
44 int main(){
45     Solution s;
46     vector<int> v = s.lexicalOrder(13);
47     for(int i = 0; i < v.size(); i ++){
48         cout << v[i] << " ";
49     }
50     cout << endl;
51     return 0;
52 }

编译:

错误在于没有对static成员变量在类外初始化,所以没有对static成员建立的链接文件。

ps:

  之所以要把cmp函数写成static,是因为cmp函数如果作为普通成员函数,自带一个this指针作为类指针的隐含参数,不能用于std::sort()函数。

参考文献:

  

成员函数隐含的this指针

vector排序问题<unresolved overloaded function type>

undefined reference问题总结

原文地址:https://www.cnblogs.com/jxzheng/p/5792497.html