C error: linker command failed with exit code 1 (use -v to see invocation)
C error: linker command failed with exit code 1 (use -v to see invocation)
我是 C 的新手,我已经搜索过但没有找到答案,但我一直在尝试让程序给我一个列表,其中包含由用户后跟所有价格的总和,我发现错误:
clang-7 -pthread -lm -o main main.c
/tmp/main-7440c0.o: In function `main':
main.c:(.text+0x12b): undefined reference to 'N'
main.c:(.text+0x164): undefined reference to 'Digitanome'
main.c:(.text+0x17f): undefined reference to 'Lista'
clang-7: error: linker command failed with exit code 1 (use -v to see invocation)
exit status 1
我一直在尝试的代码是这个:
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
extern char (N[][40]);
int i;
char p;
int cod,cont, soma2;
char soma[100];
int Digitanome( char [][40], int );
void Lista( char [100][40], int );
typedef struct {
char produto[30];
char seçao [30];
float preco;
int cargo;
}Supermercado;
Supermercado compra;
int main(void)
{
char Nome[100][40] = { '[=11=]' };
int qtdNomes = 0;
soma2 = 0;
do{
printf("\n\nEm qual seção está seu produto?");
printf("\n1-Frutas \n2-Doces \n3-Material de Limpeza\n --> ");
scanf("%d",&cod);
if(cod == 1){
*compra.seçao = *strcpy(compra.seçao,"Frutas");
}
if(cod == 2){
*compra.seçao = *strcpy(compra.seçao, "Doces");
}
if(cod == 3){
*compra.seçao = *strcpy(compra.seçao,"Material de Limpeza");
}
int Digitanome(char N[][40], int i);
{
printf("Informe o produto que você quer nesta seção: \n");
scanf("%s", & *N[i]);
*compra.produto = Digitanome( Nome, qtdNomes );
Lista( Nome, qtdNomes );
return ++i;
}
return 0;
printf("Informe o preço do produto: \n");
scanf("%f", &compra.preco);
soma2 = soma2 + compra.preco;
printf("\nDeseja mais algum produto? \n4-Sim \n0-Não, sair \n --> ");
scanf("%d",&cont);
}while(cont == 4);
{
if (cont == 0)
printf("\nFIM DAS COMPRAS!\n");
void Lista(char p[100][40], int i);{
int j = 0;
for (; j < i; j++ )
printf("\nSeus produtos são:%s\n", compra.produto);
}
printf("Essa compra está custando: %i \n", soma2);
}
}
任何人都可以向我解释发生了什么以及如何解决它吗?
几个问题:
extern char (N[][40]);
您在没有初始化的情况下将 N
声明为 extern
,因此您还需要在另一个带有初始化的模块中对其进行 delcare。但实际上您从未使用过变量 N
。您将 N[][40]
作为 Digitanome
的参数。修复下面的第 2 项和第 3 项后,您可以完全删除 extern char (N[][40]);
。
你在main()
里面定义了Digitanome
和Lista
。您需要在 main()
.
之外定义它们
您在 Digitanome
和 Lista
函数定义的末尾有分号。你需要删除那些。
您在 return 0
语句之后有代码。
您从 Digitanome
内部调用 Digitanome
。这可能不是你想要的。
解决这些问题后,您可能会发现更多问题。
正如 Jim 所提到的,您的代码中存在一些语法错误,您需要修复。
我无法理解你的代码逻辑,所以如果你仍然需要帮助,请给我评论,以便我们一起完成!
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
extern char (N[][40]); int i; char p; int cod,cont, soma2; char soma[100];
int Digitanome( char [][40], int ); void Lista( char [100][40], int ); int qtdNomes = 0;
char Nome[100][40] = { '[=10=]' };
typedef struct { char produto[30]; char seçao [30]; float preco; int cargo; }Supermercado;
Supermercado compra;
int main(void) {
soma2 = 0; do{
printf("\n\nEm qual seção está seu produto?");
printf("\n1-Frutas \n2-Doces \n3-Material de Limpeza\n --> ");
scanf("%d",&cod);
if(cod == 1){
*compra.seçao = *strcpy(compra.seçao,"Frutas");
}
if(cod == 2){
*compra.seçao = *strcpy(compra.seçao, "Doces");
}
if(cod == 3){
*compra.seçao = *strcpy(compra.seçao,"Material de Limpeza");
}
return 0;
printf("Informe o preço do produto: \n");
scanf("%f", &compra.preco);
soma2 = soma2 + compra.preco;
printf("\nDeseja mais algum produto? \n4-Sim \n0-Não, sair \n --> ");
scanf("%d",&cont); }while(cont == 4); {
if (cont == 0)
printf("\nFIM DAS COMPRAS!\n");
printf("Essa compra está custando: %i \n", soma2); } }
int Digitanome(char N[][40], int i)
{
printf("Informe o produto que você quer nesta seção: \n");
scanf("%s", & *N[i]);
*compra.produto = Digitanome( Nome, qtdNomes );
Lista( Nome, qtdNomes );
return ++i;
}
void Lista(char p[100][40], int i) { int j = 0; for (; j < i; j++ )
printf("\nSeus produtos são:%s\n", compra.produto); }
我是 C 的新手,我已经搜索过但没有找到答案,但我一直在尝试让程序给我一个列表,其中包含由用户后跟所有价格的总和,我发现错误:
clang-7 -pthread -lm -o main main.c
/tmp/main-7440c0.o: In function `main':
main.c:(.text+0x12b): undefined reference to 'N'
main.c:(.text+0x164): undefined reference to 'Digitanome'
main.c:(.text+0x17f): undefined reference to 'Lista'
clang-7: error: linker command failed with exit code 1 (use -v to see invocation)
exit status 1
我一直在尝试的代码是这个:
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
extern char (N[][40]);
int i;
char p;
int cod,cont, soma2;
char soma[100];
int Digitanome( char [][40], int );
void Lista( char [100][40], int );
typedef struct {
char produto[30];
char seçao [30];
float preco;
int cargo;
}Supermercado;
Supermercado compra;
int main(void)
{
char Nome[100][40] = { '[=11=]' };
int qtdNomes = 0;
soma2 = 0;
do{
printf("\n\nEm qual seção está seu produto?");
printf("\n1-Frutas \n2-Doces \n3-Material de Limpeza\n --> ");
scanf("%d",&cod);
if(cod == 1){
*compra.seçao = *strcpy(compra.seçao,"Frutas");
}
if(cod == 2){
*compra.seçao = *strcpy(compra.seçao, "Doces");
}
if(cod == 3){
*compra.seçao = *strcpy(compra.seçao,"Material de Limpeza");
}
int Digitanome(char N[][40], int i);
{
printf("Informe o produto que você quer nesta seção: \n");
scanf("%s", & *N[i]);
*compra.produto = Digitanome( Nome, qtdNomes );
Lista( Nome, qtdNomes );
return ++i;
}
return 0;
printf("Informe o preço do produto: \n");
scanf("%f", &compra.preco);
soma2 = soma2 + compra.preco;
printf("\nDeseja mais algum produto? \n4-Sim \n0-Não, sair \n --> ");
scanf("%d",&cont);
}while(cont == 4);
{
if (cont == 0)
printf("\nFIM DAS COMPRAS!\n");
void Lista(char p[100][40], int i);{
int j = 0;
for (; j < i; j++ )
printf("\nSeus produtos são:%s\n", compra.produto);
}
printf("Essa compra está custando: %i \n", soma2);
}
}
任何人都可以向我解释发生了什么以及如何解决它吗?
几个问题:
extern char (N[][40]);
您在没有初始化的情况下将 N
声明为 extern
,因此您还需要在另一个带有初始化的模块中对其进行 delcare。但实际上您从未使用过变量 N
。您将 N[][40]
作为 Digitanome
的参数。修复下面的第 2 项和第 3 项后,您可以完全删除 extern char (N[][40]);
。
你在
之外定义它们main()
里面定义了Digitanome
和Lista
。您需要在main()
.您在
Digitanome
和Lista
函数定义的末尾有分号。你需要删除那些。您在
return 0
语句之后有代码。您从
Digitanome
内部调用Digitanome
。这可能不是你想要的。
解决这些问题后,您可能会发现更多问题。
正如 Jim 所提到的,您的代码中存在一些语法错误,您需要修复。
我无法理解你的代码逻辑,所以如果你仍然需要帮助,请给我评论,以便我们一起完成!
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
extern char (N[][40]); int i; char p; int cod,cont, soma2; char soma[100];
int Digitanome( char [][40], int ); void Lista( char [100][40], int ); int qtdNomes = 0;
char Nome[100][40] = { '[=10=]' };
typedef struct { char produto[30]; char seçao [30]; float preco; int cargo; }Supermercado;
Supermercado compra;
int main(void) {
soma2 = 0; do{
printf("\n\nEm qual seção está seu produto?");
printf("\n1-Frutas \n2-Doces \n3-Material de Limpeza\n --> ");
scanf("%d",&cod);
if(cod == 1){
*compra.seçao = *strcpy(compra.seçao,"Frutas");
}
if(cod == 2){
*compra.seçao = *strcpy(compra.seçao, "Doces");
}
if(cod == 3){
*compra.seçao = *strcpy(compra.seçao,"Material de Limpeza");
}
return 0;
printf("Informe o preço do produto: \n");
scanf("%f", &compra.preco);
soma2 = soma2 + compra.preco;
printf("\nDeseja mais algum produto? \n4-Sim \n0-Não, sair \n --> ");
scanf("%d",&cont); }while(cont == 4); {
if (cont == 0)
printf("\nFIM DAS COMPRAS!\n");
printf("Essa compra está custando: %i \n", soma2); } }
int Digitanome(char N[][40], int i)
{
printf("Informe o produto que você quer nesta seção: \n");
scanf("%s", & *N[i]);
*compra.produto = Digitanome( Nome, qtdNomes );
Lista( Nome, qtdNomes );
return ++i;
}
void Lista(char p[100][40], int i) { int j = 0; for (; j < i; j++ )
printf("\nSeus produtos são:%s\n", compra.produto); }