C++ 不创建类或链接文件,而是获取';未定义的引用';单空穴函数误差
我在这里搜索并阅读了很多关于这个错误的帖子,但它们似乎都是关于将文件链接在一起或是搞乱创建类的。我两个都不做。这只是一个简单的程序,除了main之外还有一个函数。以下是我在编译器中遇到的错误,不是特定于任何代码行的: 架构x86_64的未定义符号:C++ 不创建类或链接文件,而是获取';未定义的引用';单空穴函数误差,c++,C++,我在这里搜索并阅读了很多关于这个错误的帖子,但它们似乎都是关于将文件链接在一起或是搞乱创建类的。我两个都不做。这只是一个简单的程序,除了main之外还有一个函数。以下是我在编译器中遇到的错误,不是特定于任何代码行的: 架构x86_64的未定义符号: “删除重复(char*,int&)”,引用自: _电子测试中的主要问题 ld:未找到架构x86_64的符号 collect2:ld返回了1个退出状态 这是我的代码: #include <iostream> using namespace
“删除重复(char*,int&)”,引用自:
_电子测试中的主要问题
ld:未找到架构x86_64的符号
collect2:ld返回了1个退出状态 这是我的代码:
#include <iostream>
using namespace std;
void delete_repeats(char arr[], int& length);
int main()
{
char b;
int length = 0;
char arr[80] = {0};
for (int i = 0; i < 80; i++)
{
cin.get(b);
arr[i] = b;
length += 1;
}
cout << endl << length << endl
<< arr << endl << arr << endl;
delete_repeats(arr, length);
cout << arr << endl << length;
return 0;
}
void delete_repeats(char arr[], int length)
{
for (int i = 0; i < length; i++)
{
for (int k = 1; k < length; k++)
{
if (arr[i] == arr[k])
{
for (int j = k; j < length; j++)
{
arr[k] = arr[k+1];
}
arr[length -1] = 0;
length -= 1;
}
}
}
}
#包括
使用名称空间std;
void delete_重复(字符arr[],int和length);
int main()
{
字符b;
整数长度=0;
char arr[80]={0};
对于(int i=0;i<80;i++)
{
cin.get(b);
arr[i]=b;
长度+=1;
}
不能改变
void delete\u重复(字符arr[],整数长度)
到
void delete\u重复(字符arr[],int和length)
所发生的事情是,您正在声明一个函数,void delete_repeats(char arr[],int&length);
(请注意,第二个参数是通过引用传递的,这就是&
在本文中的含义)
然后,您试图将该函数定义为void delete_repeats(char arr[],int length);
(注意第二个参数是如何通过值传递的),但实际上您是在用相同的名称声明和定义重载
您的链接器希望为第一个声明提供定义,但从未获得该定义。相反,它会看到一个新的声明(第二个)具有关联的定义并正确链接该定义。未定义的引用错误是您的链接器告诉您无法找到第一个声明的定义。您的函数定义中缺少一个int&
:
void delete_repeats(char arr[], int& length) { }
// ^^^
函数定义中缺少引用符号
您已将函数定义为:
void delete_repeats(char arr[], int& length);
但后来将其定义为:
void delete_repeats(char arr[], int length)
参数长度在前者中声明为int&
,但在后者中声明为普通的int
。D'oh!一定盯着它看了太久了,不会错过这样一个简单的差异。谢谢!@consuciussays没问题!如果这解决了您的问题,请确保将答案标记为已接受:)@AnthonyVallée-Dubois注意,答案不能在提问15分钟后,才能将其标记为已接受。