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

时间:2023-03-09 00:10:20
error: ld returned 1 exit status 和 error:undefined reference

undefined reference

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

error: ld returned 1 exit status

链接文件没有建立

案例

 #include<vector>
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
class Solution {
static int** nv;
static bool cmp(int x, int y){
int lenx = nv[x][];
int leny = nv[y][];
for(int xi = lenx-, yi = leny-; xi > , yi > ; xi--, yi--){
if(nv[x][xi] < nv[y][yi]) return true;
if(nv[x][xi] > nv[y][yi]) return false;
}
return false;
}
public:
vector<int> lexicalOrder(int n) {
nv = new int* [n+];
for(int i = ; i < n+; i++){
nv[i] = new int[];
}
for(int i = ; i <= n; i ++){
int y = i;
int yi = ;
while(y != ){
nv[i][yi++] = y % ;
y = y / ;
}
nv[i][] = yi;
}
vector<int> v;
for(int i = ; i <= n; i ++){
v.push_back(i);
}
sort(v.begin(), v.end(), cmp);
return v;
}
// vector<int> lexicalOrderList(int start, int last, int s, int n, vector<int>& v){ // } };
int main(){
Solution s;
vector<int> v = s.lexicalOrder();
for(int i = ; i < v.size(); i ++){
cout << v[i] << " ";
}
cout << endl;
return ;
}

编译:

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

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

ps:

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

参考文献:

  

成员函数隐含的this指针

vector排序问题<unresolved overloaded function type>

undefined reference问题总结