Xcode"体系结构x86_64的未定义符号"

Xcode “Undefined symbols for architecture x86_64”

本文关键字:quot 未定义 符号 x86 体系结构 Xcode      更新时间:2023-10-16

这是我第一次体验编程,在创建库时遇到了一些问题。当我运行该问题时,会出现以下单词:

Undefined symbols for architecture x86_64:
"stampa(int const*, int)", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

现在我在这里附上书面算法,希望能得到帮助。

文件main.cpp:

#include <iostream>
#include "libarray.h"
#define N 5
using namespace std;
int main (){
int v[N]={0};
int R=0;
stampa (v, R);
system("pause");
return 0; }

文件library.cpp:

#include <iostream>
#include "libarray.h"
using namespace std;
void stampa (int v[], int R) {
do{
cout << "Inserire riempimento: ";
cin >> R;
}while ( R>N );
cout << "nInserire elementi:n";
for ( int i=0; i<R; i++){
cout << " - elemento indice " << i << ": ";
cin >> v[i];
} }

文件libarray.h:

#define N 5
void stampa (const int v[], int R);

您在libarray.h中声明的函数将const int v[]作为第一个参数。

您在library.cpp中定义的那个将int v[]作为第一个参数。

它们不是相同的类型,因此也不是相同的函数重载。您永远不会从标头定义函数,错误消息会告诉您这一点。

需要用const定义版本,因为这是用于调用stampa (v, R);的版本,因为它是在main.cpp中声明的stampa的唯一重载。

保持一致,并在头文件和实现文件中的函数声明和定义中使用相同的类型。由于您打算修改v的元素,所以它不能是const。因此,在头文件中,更改

void stampa (const int v[], int R);

void stampa (int v[], int R);

这是一个链接错误。我的意思是,你还没有在项目设置中包含library.cpp。

右键单击左上角的项目,然后选择将文件添加到"…"。